{"id":164367,"date":"2013-01-11T00:01:03","date_gmt":"2013-01-10T20:01:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=164367"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=164367","title":{"rendered":"<span class=\"post_title\">\u041f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u043b\u044f \u0436\u0438\u0432\u044b\u0445 \u043e\u0431\u043e\u0435\u0432 \u043d\u0430 Android<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0432\u044b\u0435 \u043e\u0431\u043e\u0438, \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0432\u043e\u0442 \u0432 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 \u0436\u0438\u0432\u044b\u0435 \u043e\u0431\u043e\u0438 Android.<\/p>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0423\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<h4>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/h4>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 API7, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <b>WallpaperService.Engine<\/b> \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <b>onOffsetsChanged<\/b>. \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <b>WallpaperService.Engine<\/b>. \u041c\u0435\u0442\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443:<\/p>\n<pre><code class=\"java\">onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) <\/code><\/pre>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 <b>xOffset<\/b> \u0438 <b>yOffset<\/b>, \u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0436\u0438\u0432\u044b\u043c \u043e\u0431\u043e\u044f\u043c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>xOffset<\/b>. \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 0 \u0434\u043e 1, \u0440\u0430\u0432\u0435\u043d 0 \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0438 1 \u043f\u0440\u0438 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430. \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435), \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 xOffset \u0440\u0430\u0432\u0435\u043d 0.5. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f 3-\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0442\u043e\u043b\u043e\u0432 <b>xOffset<\/b> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e 0, 0.5, 1. \u041f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e, \u0430 \u043c\u0435\u0442\u043e\u0434 <b>onOffsetsChanged<\/b> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u00ab\u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u00bb \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 Renderer \u0432\u0430\u0448\u0438\u0445 \u043e\u0431\u043e\u0435\u0432, \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0445 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b: \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043e\u0434\u0430 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0441\u0442\u043e\u043b\u043e\u043c.<\/p>\n<p>  \u0412\u0441\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:  <\/p>\n<ul>\n<li>\u041d\u0435 \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438) \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u0435\u0442\u043e\u0434 <b>onOffsetsChanged<\/b> \u043f\u0440\u0438 \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0442\u043e\u043b\u043e\u0432. \u0427\u0442\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0430\u0449\u0435 \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0430\u043c\u044b\u043c\u0438 \u043d\u043e\u0432\u044b\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HTC One X).<\/li>\n<li>\u041d\u0435 \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0440\u0435\u0437\u043a\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043e\u0435\u0432.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0442\u043e\u043b\u044b \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u00ab\u0437\u0430\u043a\u043e\u043b\u044c\u0446\u043e\u0432\u0430\u043d\u044b\u00bb, \u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u043a\u0430\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u043e\u0431\u043e\u0435\u0432.<\/li>\n<\/ul>\n<h4>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043b\u0430\u0441\u0441 ZTouchMove<\/h4>\n<p>  \u0418\u0437-\u0437\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <b>onTouchEvent<\/b> \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <b>WallpaperService.Engine<\/b>. \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432:  <\/p>\n<pre><code class=\"java\">@Override public void onCreate(SurfaceHolder surfaceHolder) {     setTouchEventsEnabled(true); } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u0430\u0441\u0430\u043d\u0438\u0435\u043c \u044d\u043a\u0440\u0430\u043d\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0443\u0436\u0435 \u043f\u043e\u043b\u044e\u0431\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0434\u043e 1 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0438\u043d\u0435\u0440\u0446\u0438\u0438, \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0440\u0430\u0434\u043e\u0441\u0442\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043a\u0430\u0441\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u00ab\u0432\u044b\u0434\u0430\u0432\u0430\u043b\u00bb \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430:<\/p>\n<pre><code class=\"java\">import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Point; import android.os.Build; import android.os.Handler; import android.view.Display; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.ViewConfiguration; import android.view.WindowManager; import android.view.animation.Interpolator; import android.widget.Scroller;  public class ZTouchMove { \t \tpublic interface ZTouchMoveListener { \t    public void onTouchOffsetChanged(float xOffset); \t} \tprivate List&lt;ZTouchMoveListener&gt; mListeners = new ArrayList&lt;ZTouchMoveListener&gt;(); \t \tpublic class ZInterpolator implements Interpolator { \t\tpublic float getInterpolation(float input) { \t\t\t\/\/ f(x) = ax^3 + bx^2 + cx + d \t\t\t\/\/ a = x - 2 \t\t\t\/\/ b = 3 - 2x \t\t\t\/\/ c = x \t\t\t\/\/ d = 0 \t\t\t\/\/ where x = derivative in point 0 \t\t\t\/\/input = (float)(-Math.cos(10*((double)input\/Math.PI)) + 1) \/ 2; \t\t\tinput = (mVelocity - 2) * (float) Math.pow(input, 3) + (3 - 2 * mVelocity) * (float) Math.pow(input, 2) + mVelocity * input;  \t\t\treturn input; \t\t} \t} \t \tHandler mHandler = new Handler(); \t \tfinal Runnable mRunnable = new Runnable() \t{ \t    public void run()  \t    { \t    \tif(onMovingToPosition()) \t    \t\tmHandler.postDelayed(this, 20); \t    } \t}; \t \tprivate float mPosition = 0.5f; \tprivate float mPositionDelta = 0; \tprivate float mTouchDownX; \tprivate int xDiff; \tprivate VelocityTracker mVelocityTracker; \tprivate float mVelocity = 0; \tprivate Scroller mScroller; \t \tprivate final static int TOUCH_STATE_REST = 0; \tprivate final static int TOUCH_STATE_SCROLLING = 1; \tprivate static final int SCROLLING_TIME = 300; \tprivate static final int SNAP_VELOCITY = 350; \t \tprivate int mTouchSlop; \tprivate int mMaximumVelocity;\t \tprivate int mTouchState = TOUCH_STATE_REST; \t \tprivate int mWidth; \tprivate int mNumVirtualScreens = 5; \t \t@SuppressLint(&quot;NewApi&quot;) \t@SuppressWarnings(&quot;deprecation&quot;) \tpublic void init(Context ctx) { \t\tmScroller = new Scroller(ctx, new ZInterpolator()); \t\t \t\tfinal ViewConfiguration configuration = ViewConfiguration.get(ctx); \t\tmTouchSlop = configuration.getScaledTouchSlop(); \t\tmMaximumVelocity = configuration.getScaledMaximumFlingVelocity();  \t\tWindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); \t\tDisplay display = wm.getDefaultDisplay();  \t\t\/\/ API Level 13 \t\tif(Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.HONEYCOMB_MR2) { \t\t\tPoint size = new Point(); \t\t\tdisplay.getSize(size);  \t\t\tmWidth = size.x;\t\t\t \t\t} else { \t\t\t\/\/ API Level &lt;13 \t\t\tmWidth = display.getWidth();\t\t\t \t\t} \t} \t \tpublic void onTouchEvent(MotionEvent e) { \t\tif (mVelocityTracker == null) { \t\t\tmVelocityTracker = VelocityTracker.obtain(); \t\t} \t\tmVelocityTracker.addMovement(e); \t\t \t\tfinal float x = e.getX(); \t\tfinal int action = e.getAction(); \t\t \t\tswitch (action) { \t\t\tcase MotionEvent.ACTION_DOWN: \t\t\t\tmTouchState = mScroller.isFinished() ? TOUCH_STATE_REST : TOUCH_STATE_SCROLLING; \t\t\t\tif (!mScroller.isFinished()) { \t\t\t\t\tmScroller.abortAnimation(); \t\t\t\t} \t\t\t\t \t\t\t\tmTouchDownX = x; \t\t\t\tbreak; \t\t\t\t \t\t\tcase MotionEvent.ACTION_MOVE: \t\t\t\txDiff = (int) (x - mTouchDownX); \t\t\t\t \t\t\t\tif (Math.abs(xDiff) &gt; mTouchSlop && mTouchState != TOUCH_STATE_SCROLLING) { \t\t\t\t\tmTouchState = TOUCH_STATE_SCROLLING; \t\t\t\t\tif(xDiff &lt; 0) \t\t\t\t\t\tmTouchDownX = mTouchDownX - mTouchSlop; \t\t\t\t\telse \t\t\t\t\t\tmTouchDownX = mTouchDownX + mTouchSlop; \t\t\t\t\txDiff = (int) (x - mTouchDownX); \t\t\t\t} \t\t\t\t \t\t\t\tif (mTouchState == TOUCH_STATE_SCROLLING) { \t\t\t\t\tmPositionDelta = -(float)xDiff \/ (mWidth * mNumVirtualScreens); \t\t\t\t\t \t\t\t\t} \t\t\t\tbreak; \t\t\t\t \t\t\tcase MotionEvent.ACTION_UP: \t\t\t\tif (mTouchState == TOUCH_STATE_SCROLLING) { \t\t\t\t\tfinal VelocityTracker velocityTracker = mVelocityTracker; \t\t\t\t\tvelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); \t\t\t\t\tfloat velocityX = velocityTracker.getXVelocity() \/ (float)(mNumVirtualScreens * mWidth); \t\t\t\t\t \t\t\t\t\tmPosition =  mPosition + mPositionDelta; \t\t\t\t\tmPositionDelta = 0; \t\t\t\t\t \t\t\t\t\tif(!returnSpring()) { \t\t\t\t\t\tmVelocity = Math.min(3, Math.abs(velocityX * mNumVirtualScreens)) ; \t\t\t\t\t\t\/\/ deaccelerate(); \t\t\t\t\t\t\/\/ Inertion \t\t\t\t\t\tif(Math.abs(velocityX) * (float)(mNumVirtualScreens * mWidth) &gt; SNAP_VELOCITY) \t\t\t\t\t\t\tmoveToPosition(mPosition, mPosition - (velocityX &gt; 0 ? 1 : -1) * 1 \/ (float) mNumVirtualScreens ); \t\t\t\t\t\telse \t\t\t\t\t\t\tmoveToPosition(mPosition, mPosition - 0.7f * velocityX * ((float)SCROLLING_TIME \/ 1000) );\t\t\t\t\t\t \t\t\t\t\t}\t\t\t\t\t \t\t\t\t}\t\t\t\t \t\t\t\tmTouchState = TOUCH_STATE_REST; \t\t\t\tbreak; \t\t\t\t \t\t\tcase MotionEvent.ACTION_CANCEL: \t\t\t\tmTouchState = TOUCH_STATE_REST; \t\t\t\tmPositionDelta = 0; \t\t\t\tbreak; \t\t} \t\tdispatchMoving(); \t} \t \tprivate boolean returnSpring() { \t\tmVelocity = 0; \t\tif(mPositionDelta + mPosition &gt; 1 - 0.5 \/ (float) mNumVirtualScreens) \t\t\tmoveToPosition(mPosition, (float) (1 - 0.5 \/ (float) mNumVirtualScreens)); \t\telse if(mPositionDelta + mPosition &lt; 0.5 \/ (float) mNumVirtualScreens) \t\t\tmoveToPosition(mPosition, (float) 0.5 \/ (float) mNumVirtualScreens); \t\telse \t\t\treturn false; \t\treturn true; \t} \t \tprivate void moveToPosition(float current_position, float desired_position) { \t\tmScroller.startScroll((int)(current_position * 1000), 0, (int)((desired_position - current_position) * 1000), 0, SCROLLING_TIME); \t\tmHandler.postDelayed(mRunnable, 20); \t} \t \tprivate boolean onMovingToPosition() { \t\tif(mScroller.computeScrollOffset()) { \t\t\tmPosition = (float)mScroller.getCurrX() \/ 1000; \t\t\tdispatchMoving(); \t\t\treturn true; \t\t} else { \t\t\treturnSpring(); \t\t\treturn false; \t\t} \t} \t \tprivate float normalizePosition(float xOffset) { \t\tfinal float springZone = 1 \/ (float) mNumVirtualScreens; \t\t\/\/ Normalized offset is from 0 to 0.5 \t\tfloat xOffsetNormalized = Math.abs(xOffset - 0.5f); \t\tif(xOffsetNormalized + springZone \/ 2 &gt; 0.5f) { \t\t\t\/\/ Spring formula \t\t\t\/\/ (0.5 - 2 * (1 - (x \/ (2 * springZone) + 0.5))^2) * springZone \t\t\t\/\/ where x &gt;=0 and &lt;= springZone \t\t\t\/\/ delta y = springZone \/ 2, y &gt;=0 and y &lt;= springZone \/ 2 \t\t\txOffsetNormalized = 0.5f - springZone \/ 2 +  \t\t\t\t\t(0.5f - 2 * (float)Math.pow( (double)(1 - ( (xOffsetNormalized - 0.5f + springZone \/ 2) \/ (2 * springZone) + 0.5)), 2 ) ) * springZone; \t\t\t \t\t\tif(xOffset &lt; 0.5f) \t\t\t\txOffset = 0.5f - xOffsetNormalized;   \t\t\telse \t\t\t\txOffset = 0.5f + xOffsetNormalized; \t\t}\t\t \t\treturn xOffset; \t} \t \tpublic synchronized void addMovingListener(ZTouchMoveListener listener) { \t\tmListeners.add(listener); \t} \t \tprivate synchronized void dispatchMoving() { \t\tIterator&lt;ZTouchMoveListener&gt; iterator = mListeners.iterator(); \t\twhile(iterator.hasNext())  { \t\t\t((ZTouchMoveListener) iterator.next()).onTouchOffsetChanged(normalizePosition(mPosition + mPositionDelta)); \t\t} \t} } <\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0445\u043e\u0447\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u0441\u0443\u043f\u0435\u0440 \u0447\u0438\u0441\u0442\u043e\u0442\u0443 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u0430 \u043f\u0440\u0438\u0447\u0435\u0441\u043a\u0443 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 <b>ZTouchMove<\/b> \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <b>onTouchEvent(MotionEvent e)<\/b>, \u043a\u0430\u043a \u0432\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 <b>onTouchEvent<\/b> \u043a\u043b\u0430\u0441\u0441\u0430 <b>WallpaperService.Engine<\/b>. \u0414\u0430\u043b\u0435\u0435 \u0432\u0430\u0448 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <b>ZTouchMoveListener<\/b>, \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <b>onTouchOffsetChanged(float xOffset)<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043e\u0442 0 \u0434\u043e 1.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <b>ZTouchMove<\/b> \u043f\u0443\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 <b>init(Context ctx)<\/b>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0448\u0438\u0440\u0438\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0430 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0410 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439:  <\/p>\n<pre><code class=\"java\">mTouchMove = new ZTouchMove(); mTouchMove.init(ctx); mTouchMove.addMovingListener(mRenderer); <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u0442\u043e\u043b\u043e\u0432, \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u044b\u043b \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0430\u043d \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <b>mNumVirtualScreens<\/b>. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438 \u0438\u043d\u0435\u0440\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <b>ZTouchMove<\/b>: \u043f\u0440\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u00ab\u0438\u043d\u0435\u0440\u0446\u0438\u044f\u00bb, \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u00ab\u0434\u043e\u0432\u043e\u0434\u0447\u0438\u043a\u00bb \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430. \u041d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u00ab\u043f\u0440\u0443\u0436\u0438\u043d\u0430\u00bb.<\/p>\n<p>  \u0418\u0437 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0435\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u0438 \u043e\u0431\u043e\u0435\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b \u0443\u0436\u0435 \u00ab\u0443\u043f\u0435\u0440\u0441\u044f\u00bb \u0432 \u043a\u0440\u0430\u0439\u043d\u0435\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u043e\u0431\u043e\u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c. \u0418\u043b\u0438 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u00ab\u0434\u043e\u0432\u043e\u0434\u0447\u0438\u043a\u00bb \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0439 \u044d\u043a\u0440\u0430\u043d, \u0430 \u00ab\u0434\u043e\u0432\u043e\u0434\u0447\u0438\u043a\u00bb \u043e\u0431\u043e\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u0430\u043d\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.<\/p>\n<h4>\u0413\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u00ab\u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441\u0430\u00bb \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445, \u0438\u043b\u0438 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430 <b>ZTouchMove<\/b>. \u0412\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">if(xOffset != 0 && xOffset != 0.5f && xOffset != 1 || mOffsetChangedEnabled) {    \tmOffsetChangedEnabled = true;     \tmXPos = xOffset - 0.5f; \t\/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \tsetupLookatM(); } <\/code><\/pre>\n<p>  \u041e\u043d\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e <b>xOffset<\/b> \u043f\u0440\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 0, 0.5 \u0438 1, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <b>onOffsetsChanged<\/b> \u043a\u043b\u0430\u0441\u0441\u0430 <b>WallpaperService.Engine<\/b> \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0444\u043b\u0430\u0433 <b>mOffsetChangedEnabled<\/b> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u0435\u043d <b>false<\/b>, \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <b>ZTouchMove<\/b>.<\/p>\n<p>  \u041b\u0438\u0447\u043d\u043e \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443, \u0433\u0434\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0438 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0434\u0432\u0435 \u043e\u043f\u0446\u0438\u0438: \u00ab\u0420\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430\u00bb \u0438 \u00ab\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u0438\u043a\u043e\u0441\u043d\u043e\u0432\u0435\u043d\u0438\u044f\u00bb.      \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/164367\/\"> http:\/\/habrahabr.ru\/post\/164367\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041a\u0430\u0436\u0434\u044b\u0439, \u043a\u0442\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0432\u044b\u0435 \u043e\u0431\u043e\u0438, \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0432\u043e\u0442 \u0432 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0430\u043a\u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 \u0436\u0438\u0432\u044b\u0435 \u043e\u0431\u043e\u0438 Android.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-164367","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/164367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=164367"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/164367\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=164367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=164367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=164367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}