{"id":322128,"date":"2021-04-26T15:02:20","date_gmt":"2021-04-26T15:02:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=322128"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=322128","title":{"rendered":"\u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u044d\u043a\u0440\u0430\u043d \u0441 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441 \u0417\u0430\u0433\u0443\u043c\u0435\u043d\u043d\u043e\u0432, \u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043b\u0435\u043d\u0442\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435. \u041c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439, \u0441\u0442\u0435\u043d\u043e\u0439, \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c \u00ab\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438\u00bb, \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, VK Donut, \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430\u043c\u0438 \u0438 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u043e\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c.<\/p>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/552162\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u0445 \u0432 \u043e\u0431\u0449\u0435\u043c, \u0430 \u0432 \u044d\u0442\u043e\u0439 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 \u043d\u0430 Android-\u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eee\/c58\/2f3\/eeec582f3734a42c99923e45d1680471.png\" width=\"1920\" height=\"1080\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18a\/d10\/d18\/18ad10d18d0bbc5a29b8b63ddecaa593.png\" width=\"1440\" height=\"747\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0435 \u0432\u044b\u0448\u0435 \u2014 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435, \u043f\u0443\u0448 \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 (\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0434\u0435\u043b\u0430\u043b \u044f, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f). \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435, \u043e\u043a\u0430\u0436\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439. \u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439. \u041c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u044d\u043a\u0440\u0430\u043d \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u2014 \u0431\u044b\u043b\u0430 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u044f\u0432\u043e\u043a \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u044d\u043a\u0440\u0430\u043d\u0443, \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043b\u0435\u0432\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u043e. \u0422\u0430\u043a \u043e\u043d\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0442, \u043a\u0430\u043a \u0438 \u0432 \u043a\u0430\u043a\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438\u0445 \u043d\u0430\u0434\u043e \u0441\u0432\u0430\u0439\u043f\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0433\u043e-\u0442\u043e \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443.&nbsp;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e62\/7fe\/040\/e627fe040d17e64fae10ae513d8a664e.png\" width=\"2314\" height=\"1600\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0421\u0432\u0430\u0439\u043f \u0432\u043f\u0440\u0430\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443, \u0430 \u0432\u043b\u0435\u0432\u043e \u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0451. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438, \u0441\u043c\u0430\u0445\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u043b\u0435\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438\u0445, \u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442 \u043d\u0430\u0441 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f. \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u0432\u0430\u0439\u043f\u0430\u0442\u044c, \u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u043d\u0438\u0437\u0443: \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0430\u043c\u0438 \u0443\u043b\u0435\u0442\u044f\u0442 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>\u0417\u0430\u044f\u0432\u043a\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0442\u044c. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438, \u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u2014 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0410 \u0435\u0449\u0451 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0445 \u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430.<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0430\u0442\u044c\u0438<\/h3>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>1.1. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView.<\/p>\n<p>1.2. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 LayoutManager.<\/p>\n<p>1.3. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SnapHelper.<\/p>\n<p>1.4. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SmoothScroller.<\/p>\n<p>1.5. ScrollVectorProvider.<\/p>\n<p>1.6. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044c\u044e\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a.<\/p>\n<p>2.1. \u041e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>2.2. \u0414\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0432\u043e\u0434.<\/p>\n<\/li>\n<\/ol>\n<h3>1. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 RecyclerView \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c LayoutManager. RecyclerView \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432 LayoutManager \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441 \u0442\u0430\u043a\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c RecyclerView \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0433\u0438\u0431\u043a\u043e: \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u043e\u044f \u0437\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>LayoutManager \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. SnapHelper \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u043e\u043b\u043b \u00ab\u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0441\u044f\u00bb \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0441\u043f\u0438\u0441\u043a\u0430. SmoothScroller \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 ItemAnimator \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u0435\u0442 \u0432\u044c\u044e\u0445\u0438, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430.<\/p>\n<h3>1.1. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445:<\/p>\n<ol>\n<li>\n<p><strong>RecycledViewPool<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 RecycledViewPool \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043b\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0432\u044c\u044e\u043f\u0443\u043b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e RecyclerView \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0438 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 RecycledViewPool<em> <\/em>\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u2014 \u0432 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u043a\u0430\u0434\u0440\u0430 \u0434\u043e \u043a\u0430\u0434\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0440\u0430\u043f<\/strong> \u2014 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 RecyclerView \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u043e \u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c position \u0438 itemId \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 itemViewType. \u042d\u0442\u043e\u0442 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u043c\u0443, \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0451\u043d \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 stableId.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0441\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u044c\u044e\u0445\u0430 \u2014 \u044d\u0442\u043e \u0442\u0430, \u0447\u0442\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 RecyclerView, \u043d\u043e \u0431\u044b\u043b\u0430 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 RecyclerView. \u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u043a\u0440\u0430\u043f \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u0432\u044c\u044e\u0445 \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043b\u0451\u0433\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u044c\u044e\u043f\u0443\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043b\u0430\u0441\u0441 Recycler <\/strong>\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u0437\u0430\u0441\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 RecyclerView \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>ChildHelper <\/strong>\u2014<strong> <\/strong>\u044d\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 RecyclerView. \u0412 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041f\u0435\u0440\u0432\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0435\u0441\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 ViewGroup: getChildAt, getChildCount \u0438 \u0442.\u202f\u0434. \u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u2014 \u0432 \u043d\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b getUnfilteredChildCount \u0438\u043b\u0438 getUnfilteredChildAt.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 ChildHelper \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0432\u044c\u044e\u0445. \u041e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e. \u0412\u0441\u0435 \u0432\u044c\u044e\u0445\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 RecyclerView.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0435\u0448 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0432 Recycler. <\/strong>\u0423 \u044d\u0442\u043e\u0433\u043e \u043a\u0435\u0448\u0430 \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0440\u0430\u0432\u0435\u043d 2. \u0415\u0441\u043b\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439, \u043d\u0435 \u0443\u0434\u0430\u043b\u0451\u043d, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435), \u0442\u043e \u043e\u043d \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0435\u0448. \u0415\u0441\u043b\u0438 \u043a\u0435\u0448 \u043f\u043e\u043b\u043e\u043d, \u0442\u043e \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 RecycledViewPool. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b \u0432 \u044d\u0442\u043e\u0442 \u043a\u0435\u0448, \u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 RecycledViewPool<em>. <\/em>\u041c\u043e\u0436\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0430 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 Recycler.setViewCacheSize. \u041d\u043e \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 setViewCacheSize, \u043f\u043b\u044e\u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044c\u044e\u0445 \u0432 \u043f\u0440\u0435\u0444\u0435\u0442\u0447\u0435.<\/p>\n<\/li>\n<li>\n<p>RecyclerView \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044c\u044e\u0445<\/strong>, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u042d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 ViewCacheExtension.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0441\u043a\u0440\u0430\u043f\u044b \u0438 \u043a\u0435\u0448\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044c\u044e\u0445\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0438\u043b\u0438 \u0432 RecyclerView, \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438. \u0410 RecycledViewPool \u2014 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043b\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 LayoutManager \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 Recycler \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 recycler.getViewForPosition(position). \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 Recycler \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0432\u044c\u044e\u0445\u0443 \u0432 \u0441\u043a\u0440\u0430\u043f\u0430\u0445 \u0438 \u043a\u0435\u0448\u0430\u0445 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435), \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 getViewForPosition \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u0443 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435,<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u043e\u043d \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 getViewForPosition(position) Recycler \u0438\u0449\u0435\u0442 \u0432\u044c\u044e\u0445\u0443 \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:&nbsp;<\/p>\n<ol>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044c\u044e\u0445 \u2014 \u0438\u0449\u0435\u0442 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u043a\u0440\u0430\u043f\u0430). \u0410 \u0437\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442, \u0442\u043e \u043f\u043e stableId (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 setHasStableId(true)).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u044c\u044e\u0445 \u2014 \u043f\u043e\u0438\u0441\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0434\u0451\u0442 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0432\u044c\u044e\u0445 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e: \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u044e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f) \u0432 ChildHelper, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0435\u0448\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 Recycler, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e stableId (\u0435\u0441\u043b\u0438 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 setHasStableId(true)).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0435\u0448\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 Recycler \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e stableId (\u0441 \u0442\u0435\u043c \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u043a\u0435\u0448\u0435 ViewCacheExtension \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u0438 \u0442\u0438\u043f\u0443 (\u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0443\u043b\u0435 RecycledViewPool \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u0438\u043f\u0443.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b01\/431\/262\/b01431262bd86c9d03b74976013ae7a2.jpeg\" width=\"1700\" height=\"1700\"><figcaption><\/figcaption><\/figure>\n<h3>1.2. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 LayoutManager<\/h3>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 LayoutManager \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 onLayout \u0438 onMeasure \u0443 \u0432\u044c\u044e\u0433\u0440\u0443\u043f\u043f\u044b. \u041d\u043e \u0443 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430: \u0432 \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043e, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043f\u0438\u0441\u043a\u0430. LayoutManager \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LayoutManager \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0430.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043b\u0431\u044d\u043a\u0435:<\/p>\n<pre><code class=\"kotlin\">fun onLayoutChildren(recycler: Recycler, state: State)<\/code><\/pre>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u044f \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a, RecyclerView \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u044c\u044e\u0445\u0438, \u0430 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 State \u0438 Recycler. State \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 RecyclerView<em>:<\/em><\/p>\n<ol>\n<li>\n<p>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0448\u0430\u0433 \u043b\u0435\u0439\u0430\u0443\u0442\u0430 (STEP_START \u2014 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e, STEP_LAYOUT \u2014 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043b\u0435\u0439\u0430\u0443\u0442\u0430, STEP_ANIMATIONS \u2014 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435).<\/p>\n<\/li>\n<li>\n<p>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 (\u0434\u043b\u044f SmoothScroller).<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043b\u0435\u0439\u0430\u0443\u0442\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0438 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 RecyclerView.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 id \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u043a\u0443\u0441. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u044f\u044f \u0432\u044c\u044e\u0445\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0435\u0451 id. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043b\u0435\u0439\u0430\u0443\u0442\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u044c\u044e\u0445\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0444\u043e\u043a\u0443\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>RecyclerView \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0432\u043e \u0432\u0441\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 State. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 SparseArray&lt;Object&gt;. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044f \u0437\u0430 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0446\u0438\u043a\u043b\u0430\u043c\u0438.<\/p>\n<p>Recycler \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0432 \u0441\u043a\u0440\u0430\u043f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044c\u044e\u0445\u0443 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.&nbsp;<\/p>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 onLayoutChildren \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0440\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c. \u0422\u0430\u043c \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u044b\u0448\u043b\u0430 \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044b, \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439. \u041f\u043e\u044f\u0441\u043d\u044e, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0440\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438. \u041f\u0435\u0440\u0432\u0443\u044e \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0436\u0435\u0441\u0442\u0430\u043c\u0438. \u0412\u0442\u043e\u0440\u0443\u044e \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0434 \u043f\u0435\u0440\u0432\u043e\u0439, \u0438 \u043e\u043d\u0430 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0435\u0451 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438. \u0410 \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0443\u0436\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u044d\u043a\u0440\u0430\u043d\u0430 \u0438 \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0442\u0430\u0451\u0442 \u043d\u0430 \u0435\u0451 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"kotlin\">override fun onLayoutChildren(recycler: Recycler, state: State) {    \/\/ \u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 layout(recycler)    layout(recycler)    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043b\u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 onLayoutChildren    if (!state.didStructureChange()) return    \/\/ \u0415\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443    val topView = getTopView() ?: return    \/\/ \u0418 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435    callback?.onCardAppeared(topView, this.state.topPosition) }<\/code><\/pre>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 layout(recycler) \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0440\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435:<\/p>\n<pre><code class=\"kotlin\">private fun layout(recycler: RecyclerView.Recycler) {    state.width = width    state.height = height    if (state.isSwipeCompleted()) {        onSwipeCompleted(recycler)    }    \/\/ \u041e\u0442\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0432\u044c\u044e\u0445\u0438 \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432 \u0441\u043a\u0440\u0430\u043f    detachAndScrapAttachedViews(recycler)    var i = state.topPosition    while (i &lt; state.topPosition + animationProvider.visibleCards &amp;&amp; i &lt; itemCount) {        val child = recycler.getViewForPosition(i)        addView(child, 0)        val stableId = adapter?.getItemId(i) ?: 0L        if (needMeasure(child, stableId)) {            \/\/ \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443            measureCardView(child, stableId)        }        \/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435        animationProvider.update(i, child, state)        i++    }    if (state.status.isDragging) {        callback?.onCardDragging(state.direction, animationProvider.getRatio(state))    } }  private fun measureCardView(child: View, stableId: Long) {   measureChildWithMargins(child, 0, 0)   val parentTop = paddingTop   val parentLeft = paddingLeft   val parentRight = state.width - paddingRight   val parentBottom = state.height - paddingBottom   \/\/ \u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443   val childPaddingHorizontal = (parentRight - paddingLeft - child.measuredWidth) \/ 2   val childPaddingVertical = (parentBottom - paddingTop - child.measuredHeight) \/ 2   layoutDecoratedWithMargins(child,              parentLeft + childPaddingHorizontal,              parentTop + childPaddingVertical,              parentRight - childPaddingHorizontal,              parentBottom - childPaddingVertical)   addMeasuredViewHolder(stableId) }<\/code><\/pre>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 onSwipeCompleted \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u0436\u0435\u0441\u0442 \u0441\u0432\u0430\u0439\u043f\u0430 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0443\u043b\u0435\u0442\u0435\u043b\u0430 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044d\u043a\u0440\u0430\u043d\u0430:<\/p>\n<pre><code class=\"kotlin\">private fun onSwipeCompleted(recycler: RecyclerView.Recycler) {    \/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044c\u044e\u0445\u0443 \u0432 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435    getTopView()?.let {        removeAndRecycleView(it, recycler)    }    \/\/ \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u0430\u0439\u043f\u0430    val direction = state.direction    val directionHorizontal = state.directionHorizontal    \/\/ \u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0441\u0432\u0430\u0439\u043f\u043d\u0443\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438    val position = state.topPosition    val prevStatus = state.status    \/\/ \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e    state.set(state.status.toAnimatedStatus())    state.topPosition++    state.x = 0    state.y = 0    if (state.topPosition == state.targetPosition) {        state.targetPosition = RecyclerView.NO_POSITION    }    \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0446\u0438\u043a\u043b \u043b\u0443\u043f\u0435\u0440\u0430    handler.post {        \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435        val isManual = prevStatus == Status.ManualSwipeAnimating || prevStatus == FinishManualSwipeAnimating        val isButton = prevStatus == Status.ButtonSwipeAnimating        if (isManual || isButton) {            \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a \u043e \u0441\u0432\u0430\u0439\u043f\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438            callback?.onCardSwiped(direction, directionHorizontal,  position, isManual)        }        \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a \u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c        getTopView()?.let {            callback?.onCardAppeared(it, state.topPosition)        }    } }<\/code><\/pre>\n<p>\u041e\u0447\u0438\u0441\u0442\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0432\u044c\u044e\u0445 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043b\u0431\u044d\u043a\u0435:<\/p>\n<pre><code class=\"kotlin\">fun onLayoutCompleted(State state)<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0441\u043b\u0435 \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0432\u0441\u0435\u0445 \u0432\u044c\u044e\u0445 RecyclerView. \u041b\u0435\u0439\u0430\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 onLayoutChildren(Recycler, State) \u0438\u0437-\u0437\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043b\u0435\u0439\u0430\u0443\u0442\u0430 RecyclerView \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 RecyclerView \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u0435\u0451 \u0432\u044c\u044e\u0445\u0430 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445:<\/p>\n<pre><code class=\"kotlin\">fun scrollVerticallyBy(dy: Int, Recycler recycler, State state): Int fun scrollHorizontallyBy(dx: Int, Recycler recycler, State state): Int<\/code><\/pre>\n<p>\u0433\u0434\u0435 dx\/dy \u2014 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043d\u0430 <em>dx\/dy<\/em> \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043a\u043e\u043d\u0435\u0446 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043b\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c (\u043e\u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438), \u0442\u043e \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f 0.<\/p>\n<p>\u0412 \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445, \u043a\u0430\u043a \u0438 \u0432 onLayoutChildren, \u043c\u044b:<\/p>\n<ul>\n<li>\n<p>\u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0440\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439,&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c,<\/p>\n<\/li>\n<li>\n<p>\u0435\u0441\u043b\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0443\u0448\u043b\u0430 \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0438\u0437 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0430. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435:<\/p>\n<pre><code class=\"kotlin\">override fun scrollHorizontallyBy(dx: Int, recycler: Recycler, s: State) =     when (state.status) {        Status.Idle,        Status.RewindAnimating,        Status.ButtonSwipeAnimating,        Status.FinishManualSwipeAnimating,        Status.AutomaticRemoveAnimating,        Status.ManualSwipeAnimating,        Status.OnBoardingAnimating,        Status.OnBoardingCanceling -&gt; {            state.x -= dx            layout(recycler)            dx        }        Status.Dragging -&gt; {            \/\/ \u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 (\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0449\u0430\u044f \u0437\u0430\u044f\u0432\u043a\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438, \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u0430\u0439\u043f\u043e\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u00bb)             if (this.canDrag(this.topPosition, state.direction)) {                state.x -= dx                layout(recycler)                dx            } else {                0            }        }        else -&gt; 0 }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0430\u044f \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438 \u0434\u043b\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0432\u044c\u044e\u0445\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e layout(recycler) \u2014 \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u044b\u0448\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<pre><code class=\"kotlin\">fun canScrollVertically(): Boolean&nbsp; fun canScrollHorizontally(): Boolean<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 canScrollHorizontally() \u0432\u0435\u0440\u043d\u0451\u0442 false, \u0442\u043e scrollHorizontallyBy() \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d.<\/p>\n<p>\u0421\u043c\u0435\u043d\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043b\u0431\u044d\u043a\u0430:&nbsp;<\/p>\n<pre><code class=\"kotlin\">fun onScrollStateChanged(state: Int)<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043b\u0431\u044d\u043a\u0435 \u0432\u044b\u0448\u0435 \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u0432\u0430\u0439\u043f \u0438\u043b\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0424\u0440\u0438\u0437 \u043d\u0443\u0436\u0435\u043d \u0432 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0435 \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u0438\u0430\u043b\u043e\u0433 \u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<pre><code class=\"kotlin\">override fun onScrollStateChanged(s: Int) {    when (s) {        RecyclerView.SCROLL_STATE_IDLE -&gt; {            when {                \/\/ \u041f\u0440\u0438 \u043f\u0430\u0443\u0437\u0435 \u0441\u0432\u0430\u0439\u043f\u0430 (\u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u0438\u0430\u043b\u043e\u0433 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f) \u0438 \u0432 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c                state.isPauseSwipe || state.isSwipeOnBoardingAnimating -&gt; {}                state.status == Status.OnBoardingCanceling -&gt; {                    state.set(Status.Idle)                }                state.targetPosition == RecyclerView.NO_POSITION || state.topPosition == state.targetPosition -&gt; {                    state.set(Status.Idle)                    state.targetPosition = RecyclerView.NO_POSITION                }                \/\/ topPosition \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435                state.topPosition &lt; state.targetPosition -&gt; {                    \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435                    \/\/ \u0418\u043d\u0430\u0447\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u0443\u0437\u044b                    if (this.canContinueSwipe(this.topPosition, state)) {                        val type = when {                            state.status == Status.AutomaticRemoveAnimating -&gt; {                               ScrollType.AutomaticRemove                            }                            state.directionHorizontal == Direction.Right -&gt; if (state.status == Status.ButtonSwipeAnimating) {                               ScrollType.ButtonAccept                            } else {                               ScrollType.FinishManualAccept                            }                            else -&gt; if (state.status == Status.ButtonSwipeAnimating) {                               ScrollType.ButtonDecline                            } else {                               ScrollType.FinishManualDecline                            }                        }                        smoothScrollToNext(state.targetPosition, type)                    } else {                        state.pauseSwipe()                    }                }                \/\/ \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443                else -&gt; smoothScrollToPrevious(state.targetPosition)            }        }        RecyclerView.SCROLL_STATE_DRAGGING -&gt; {            state.set(UserDiscoverState.Status.Dragging)        }    } }<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b smoothScrollToNext \u0438 smoothScrollToPrevious \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0435 \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">private fun smoothScrollToNext(position: Int, type: ScrollType) {    this.state.targetPosition = position    val scroller = SmoothScrollerFactory.create(type, this)    scroller.targetPosition = this.topPosition    startSmoothScroll(scroller) }  private fun smoothScrollToPrevious(position: Int) {    \/\/ topPosition \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435     getTopView()?.let {        callback?.onCardDisappeared(it, this.topPosition)    }    this.state.targetPosition = position    this.state.topPosition--    val scroller = SmoothScrollerFactory.create(ScrollType.AutomaticRewind, this)    scroller.targetPosition = this.topPosition    startSmoothScroll(scroller) }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">fun smoothScrollToPosition(recyclerView: RecyclerView?, s: State?, position: Int)<\/code><\/pre>\n<p>\u0412 \u043d\u0451\u043c \u043c\u044b \u043f\u043b\u0430\u0432\u043d\u043e, \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e SmoothScroller<em> \u2014 <\/em>\u044d\u0442\u043e<em> <\/em>\u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u0440\u043e\u043b\u043b. \u0418 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c startSmoothScroll(SmoothScroller).<\/p>\n<pre><code class=\"kotlin\">private fun smoothScrollToPosition(position: Int) {    \/\/ topPosition \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435    if (state.topPosition &lt; position) {        val type = if (state.status == Status.ButtonSwipeAnimating) {           ScrollType.ButtonAccept        } else {           ScrollType.FinishManualAccept        }        smoothScrollToNext(position, type)    } else {        smoothScrollToPrevious(position)    } }<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c, \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u043e\u043b\u043b \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p><iframe id=\"60803154563ace6d7a18d81d\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60803154563ace6d7a18d81d\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043a\u0440\u043e\u043b\u043b \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u0435\u0437 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">fun scrollToPosition(position: Int)<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u043d\u0430\u0448 LayoutManager \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0443 \u043d\u0435\u0433\u043e requestLayout(). \u041f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0432\u044b\u0437\u043e\u0432 onLayout \u0443 LayoutManager, \u0438 \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<p><strong>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044c\u044e\u0445\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 addView:<\/strong><\/p>\n<pre><code class=\"kotlin\">fun addView(child: View)<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e addView \u0443 ViewGroup. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u043e\u043d \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 RecyclerView, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044c\u044e\u0445\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0437 \u0441\u043a\u0440\u0430\u043f\u0430.<\/p>\n<p><strong>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0432\u044c\u044e\u0445\u0438 \u043e\u0442 RecyclerView, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u044b detachAndScrapView \u0438<\/strong> <strong>detachAndScrapAttachedViews:<\/strong><\/p>\n<pre><code class=\"kotlin\">fun detachAndScrapView(child: View, recycler: Recycler)<\/code><\/pre>\n<p>\u041e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u0443\u044e \u0432\u044c\u044e\u0445\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0451 \u0432 \u0441\u043a\u0440\u0430\u043f, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u0443\u044e. \u0415\u0441\u043b\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044c\u044e\u0445\u0430, \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d stableId, \u0442\u043e \u0441\u0430\u043c\u0430 \u0432\u044c\u044e\u0445\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 RecyclerView, \u0430 \u0435\u0451 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 RecycledViewPool. \u0418\u043d\u0430\u0447\u0435 \u0432\u044c\u044e\u0445\u0430 \u0434\u0435\u0442\u0430\u0447\u0438\u0442\u0441\u044f \u043e\u0442 RecyclerView, \u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u0441 \u043d\u0435\u0439 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0441\u043a\u0440\u0430\u043f \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"kotlin\">fun detachAndScrapAttachedViews(recycler: Recycler)<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 (detachAndScrapAttachedViews) \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 detachAndScrapView, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u0432\u044c\u044e\u0445\u0438 RecyclerView. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u043e\u0442 \u0436\u0435.<\/p>\n<p><strong>\u041d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432&nbsp;<\/strong><\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 LayoutManager:<\/p>\n<pre><code class=\"kotlin\">fun onItemsAdded(recyclerView: RecyclerView, positionStart: Int, itemCount: Int) fun onItemsChanged(recyclerView: RecyclerView, positionStart: Int, itemCount: Int) fun onItemsMoved(recyclerView: RecyclerView, positionStart: Int, itemCount: Int) fun onItemsRemoved(recyclerView: RecyclerView, positionStart: Int, itemCount: Int) fun onItemsUpdated(recyclerView: RecyclerView, positionStart: Int, itemCount: Int) fun onItemsUpdated(recyclerView: RecyclerView, positionStart: Int, itemCount: Int, payload: Any)<\/code><\/pre>\n<h3>1.3. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SnapHelper<\/h3>\n<p>SnapHelper<strong> <\/strong>\u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0432\u044c\u044e\u0445\u0443 \u2014 \u0435\u0451 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e SnapHelper \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u043e\u043b\u043b \u00ab\u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0441\u044f\u00bb \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0432\u044c\u044e\u0445\u0438.<\/p>\n<p>SnapHelper \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 fling-\u0436\u0435\u0441\u0442\u044b, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 LayoutManager \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ScrollVectorProvider, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c onFling(int, int) \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c fling-\u0436\u0435\u0441\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u043e\u0434\u0445\u043e\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c LayoutManager \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ScrollVectorProvider (\u0442\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0447\u0435\u0440\u0435\u0437 onFling(int, int) \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b).<\/p>\n<p>\u0414\u043b\u044f \u0436\u0435\u0441\u0442\u0430 \u0441\u043c\u0430\u0445\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:&nbsp;<\/p>\n<ul>\n<li>\n<p>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043c\u0435\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 &nbsp;findTargetSnapPosition \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043e\u0441\u044f\u043c <em>x<\/em> \u0438 <em>y<\/em>. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 findTargetSnapPosition. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 calculateDistanceToFinalSnap, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0436\u0435\u0441\u0442.<\/p>\n<pre><code class=\"kotlin\">fun calculateDistanceToFinalSnap(layoutManager: LayoutManager, targetView: View): IntArray?<\/code><\/pre>\n<p>\u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c RecyclerView \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0432\u044c\u044e\u0445\u0438, \u043a\u043e\u0433\u0434\u0430 SnapHelper \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043b fling-\u0436\u0435\u0441\u0442. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b SnapHelper \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043b RecyclerView, \u2014 \u043c\u044b \u0441\u0430\u043c\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438.<\/p>\n<pre><code class=\"kotlin\">override fun calculateDistanceToFinalSnap(        layoutManager: RecyclerView.LayoutManager,        targetView: View ): IntArray {    if (layoutManager !is UsersDiscoverLayoutManager) return IntArray(2)    \/\/ topPosition \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a   if (layoutManager.findViewByPosition(layoutManager.topPosition) == null) return IntArray(2)      val state = layoutManager.state      \/\/ \u0415\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u0443\u0437\u044b, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c    if (state.isPauseSwipe) return IntArray(2)    \/\/ \u0415\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c    if (state.isSwipeOnBoardingAnimating) return IntArray(2)      val x = targetView.translationX.toInt()    val y = targetView.translationY.toInt()    \/\/ \u0415\u0441\u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u0442, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c    if (x == 0 &amp;&amp; y == 0) return IntArray(2)      val horizontal = abs(x) \/ layoutManager.getWidth().toFloat()    \/\/ \u0415\u0441\u043b\u0438 \u0436\u0435\u0441\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e \u043e\u0441\u0438 \u0445 \u0438\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c layoutManager.swipeThreshold, \u0442\u043e     if (isFast(velocityX) || layoutManager.swipeThreshold &lt; horizontal) {    resetVelocity()        if (layoutManager.canContinueSwipe(layoutManager.topPosition, layoutManager.state)) {        \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f \u0441\u043a\u0440\u043e\u043b\u043b\u0430        val type = when {            state.status == Status.AutomaticRemoveAnimating -&gt; ScrollType.AutomaticRemove            state.directionHorizontal == Direction.Right -&gt; if (state.status == Status.ButtonSwipeAnimating) {                ScrollType.ButtonAccept            } else {                ScrollType.FinishManualAccept            }                state.status == Status.ButtonSwipeAnimating -&gt; ScrollType.ButtonDecline                else -&gt; ScrollType.FinishManualDecline            }            \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0436\u0435\u0441\u0442\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043a\u0440\u043e\u043b\u043b\u043e\u043c            layoutManager.finishSwipe(type)       } else {            \/\/ \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443            layoutManager.pauseSwipe()       }    } else {        \/\/ \u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u0436\u0435\u0441\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e        layoutManager.cancelManualSwipe()    }    \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432    return IntArray(2) }<\/code><\/pre>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043a\u0443\u0434\u0430 \u0441\u043c\u0430\u0445\u043d\u0443\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439:<\/p>\n<p>\u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0436\u0435\u0441\u0442\u0430 \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0434\u0432\u0430: \u0432\u043b\u0435\u0432\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u043e;<\/p>\n<p>\u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445;<\/p>\n<p>\u2014 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043c\u0438\u0440\u0430\u0442\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u043d\u0435\u0439 (\u0441\u043c. \u043f. 2).<\/p>\n<p><iframe id=\"608032ee563ace6d7a18d81e\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/608032ee563ace6d7a18d81e\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/li>\n<li>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b \u0435\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043e\u043d \u0443\u0431\u0440\u0430\u043b \u043f\u0430\u043b\u0435\u0446 \u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0435 \u043d\u0430\u0434\u043e. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u043c\u0443 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u0438\u0430\u043b\u043e\u0433, \u0438 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0437\u0430\u043c\u0438\u0440\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ef2\/74a\/e25\/ef274ae2505740954251702880c2d3fc.jpeg\" width=\"1800\" height=\"1800\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 1 \u0438 \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f (\u0432 \u043f\u0443\u043d\u043a\u0442\u0435 2).<\/p>\n<\/li>\n<\/ol>\n<p><iframe id=\"608033c6563ace6d7a18d81f\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/608033c6563ace6d7a18d81f\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p><strong>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044c\u044e\u0445\u0443, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/strong><\/p>\n<p>fun findSnapView(layoutManager: LayoutManager): View?<\/p>\n<p>\u041e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 SnapHelper \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u044e. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u044f\u0432\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 SnapHelper \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u044e \u043f\u043e\u0441\u043b\u0435 fling-\u0436\u0435\u0441\u0442\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 null, \u0442\u043e SnapHelper \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u043e\u0439, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0451, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u044d\u043a\u0440\u0430\u043d\u0430. \u0414\u0430\u043b\u044c\u0448\u0435 SnapHelper \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0435\u0451 \u043a\u0430\u043a targetView \u0432 \u043c\u0435\u0442\u043e\u0434 calculateDistanceToFinalSnap.<\/p>\n<pre><code class=\"kotlin\">override fun findSnapView(layoutManager: RecyclerView.LayoutManager): View? {    if (layoutManager !is UsersDiscoverLayoutManager) return null      \/\/ layoutManager.topPosition \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a    val view = layoutManager.findViewByPosition(layoutManager.topPosition) ?: return null      val x = view.translationX.toInt()    val y = view.translationY.toInt()    val width = layoutManager.getWidth()    val height = layoutManager.getHeight()    return if (x &gt; width || y &gt; height || x == 0 &amp;&amp; y == 0) {        null    } else view }<\/code><\/pre>\n<p><strong>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0436\u0435\u0441\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/strong><\/p>\n<p>fun findTargetSnapPosition(layoutManager: LayoutManager, velocityX: Int, velocityY: Int): Int<\/p>\n<p>\u0433\u0434\u0435 velocityX<em> <\/em>\u0438<em> <\/em>velocityY<em> <\/em>\u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0436\u0435\u0441\u0442\u0430 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u044f\u043c.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0436\u0435\u0441\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u0441\u0430\u043c\u043e\u0439 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443.<\/p>\n<pre><code class=\"kotlin\">override fun findTargetSnapPosition(        layoutManager: RecyclerView.LayoutManager,        velocityX: Int,        velocityY: Int ): Int {    this.velocityX = abs(velocityX)    this.velocityY = abs(velocityY)    return if (layoutManager is UsersDiscoverLayoutManager) {        \/\/ \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a        layoutManager.topPosition    } else {        RecyclerView.NO_POSITION    } }<\/code><\/pre>\n<h3>1.4. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SmoothScroller<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u0441\u043a\u0440\u043e\u043b\u043b, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 startSmoothScroll(SmoothScroller)<em> <\/em>\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 SmoothScroller \u2014 \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"kotlin\">fun onStart()<\/code><\/pre>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0441\u0432\u0430\u0439\u043f\u0430 (\u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u0430: \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0438\u043b\u0438 \u0436\u0435\u0441\u0442\u043e\u043c);<\/p>\n<\/li>\n<li>\n<p>\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0427\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/strong><\/p>\n<pre><code class=\"kotlin\">fun onStop()<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043b\u0431\u044d\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u2014 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043c\u0435\u0441\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u044f\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e:&nbsp;<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0441\u0432\u0430\u0439\u043f\u043d\u0443\u043b\u0438 \u0432\u043f\u0440\u0430\u0432\u043e \u0438\u043b\u0438 \u0432\u043b\u0435\u0432\u043e,&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433,&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0430\u0441\u044c \u043d\u0430 \u043c\u0435\u0441\u0442\u043e,<\/p>\n<\/li>\n<li>\n<p>\u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0432\u044b\u0448\u043b\u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u043d.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0432\u044c\u044e\u0445\u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c<\/strong> <strong>\u0432 \u043a\u043e\u043b\u0431\u044d\u043a\u0435<\/strong> onSeekTargetStep <strong>\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439<\/strong> SmoothScroller.Action. \u0422\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">fun onSeekTargetStep(dx: Int, dy: Int, state: State, action: Action)<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u044c\u044e\u0445\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 dx, dy. Action \u2014 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u0441\u043a\u0440\u043e\u043b\u043b\u0435 \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u043c SmoothScroller.<\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0432\u044c\u044e\u0445\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/strong><\/p>\n<pre><code class=\"kotlin\">fun onTargetFound(targetView: View, state: State, action: Action)<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043b\u0431\u044d\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 SmoothScroller. \u0412 \u043d\u0451\u043c \u043d\u0430\u0434\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 Action, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0432\u044c\u044e\u0445\u0438. \u041e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c update \u0443 Action:<\/p>\n<ul>\n<li>\n<p>dx \u2014 \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>dy \u2014 \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>duration \u2014 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u043e\u043b\u043b\u0430,<\/p>\n<\/li>\n<li>\n<p>interpolator \u2014 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043d\u0430\u0448\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c SmoothScroller \u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u041f\u0440\u0438\u043d\u044f\u0442\u044c\u00bb \u0438\u043b\u0438 \u00ab\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\u00bb. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0432\u0430\u0439\u043f \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0437\u0430\u044f\u0432\u043a\u0438:<\/p>\n<pre><code class=\"kotlin\">class AcceptSmoothScroller(    private val manager: UsersDiscoverLayoutManager ) : RecyclerView.SmoothScroller() {    override fun onTargetFound(targetView: View, state: RecyclerView.State, action: Action) {        val x = targetView.translationX        val y = targetView.translationY        action.update(            manager.getDx(x, Direction.Right, manager.state),            manager.getDy(y, Direction.Right, manager.state),            manager.swipeAnimationDuration,            manager.swipeAnimationInterpolator        )    }        override fun onStart() {        manager.state.set(Status.ButtonSwipeAnimating)        val topView = manager.getTopView() ?: return        manager.callback?.onCardDisappeared(topView, manager.topPosition)    } }<\/code><\/pre>\n<h3>1.5. ScrollVectorProvider<\/h3>\n<p>\u042d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u0443 SmoothScroller \u0432\u0435\u043a\u0442\u043e\u0440-\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f).<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c LayoutManager \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 ScrollVectorProvider \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">fun computeScrollVectorForPosition(targetPosition: Int): PointF?<\/code><\/pre>\n<p>\u0412 \u043d\u0451\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440-\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f. LayoutManager \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435. \u041c\u044b \u0441\u043c\u0435\u0449\u0430\u0435\u043c\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0451\u0434 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0441\u0430\u043c\u0438 \u0432 \u0441\u0432\u043e\u0438\u0445 SmoothScroller \u0438 SnapHelper. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u0434\u0435\u0441\u044c null.<\/p>\n<h3>1.6. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044c\u044e\u0445<\/h3>\n<p>\u0417\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 ItemAnimator. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e RecyclerView \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 DefaultItemAnimator. \u0412 \u043d\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0418\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044c\u044e\u0445.&nbsp;<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044c\u044e\u0445\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 onLayoutChildren(Recycler, State)<em> <\/em>\u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 \u0438\u0445 \u043b\u0435\u0439\u0430\u0443\u0442<em>, \u2014 <\/em>\u0442\u043e \u0443 RecyclerView \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c false \u0432 supportsPredictiveItemAnimations().&nbsp;<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0443\u0436\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f, \u0442\u043e \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c supportsPredictiveItemAnimations() \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c true, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 onLayoutChildren(Recycler, State). \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e onLayoutChildren(Recycler, State) \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b. \u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u2014 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043b\u0435\u0439\u0430\u0443\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0433\u0434\u0435 \u0431\u044b\u043b\u0438 \u0432\u044c\u044e\u0445\u0438 \u0434\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043b\u0435\u0439\u0430\u0443\u0442\u0430. \u0418 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043b\u0435\u0439\u0430\u0443\u0442.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u043b\u0435\u0439\u0430\u0443\u0442\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0435\u0440\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u0441\u044f \u0438\u0437 \u0441\u043a\u0440\u0430\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u043e\u0447\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043b\u0435\u0439\u0430\u0443\u0442 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445. \u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044c\u044e\u0445 RecyclerView. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u044c\u044e\u0445 \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u0447\u0442\u043e \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 (\u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 APPEARING-\u0432\u044c\u044e\u0445\u0438), \u043d\u043e \u0447\u044c\u0451 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u0434\u043e \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u2014 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043b\u0435\u0439\u0430\u0443\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0432\u044c\u044e\u0445\u0438.&nbsp;<\/p>\n<h3>2. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a<\/h3>\n<h3>2.1. \u041e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433<\/h3>\n<p>\u0423 \u043d\u0430\u0441 \u0434\u0432\u0430 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0430 \u0438\u0437 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0431\u0430 \u0441\u043b\u0443\u0447\u0430\u044f:<\/p>\n<ol>\n<li>\n<p><strong>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0432\u043f\u0440\u0430\u0432\u043e \u0438 \u0432\u043b\u0435\u0432\u043e.<\/strong><\/p>\n<p><iframe id=\"608034a1388fa3867a8ff42e\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/608034a1388fa3867a8ff42e\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u0443\u0441\u043a SmoothScroller. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u2014 \u0432 \u043f\u0440\u0430\u0432\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0448\u0438\u0440\u0438\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0430. \u0417\u0430\u0442\u0435\u043c \u043d\u0430 \u043a\u043e\u043b\u0431\u044d\u043a onStop \u0432 \u043f\u0435\u0440\u0432\u043e\u043c SmoothScroller \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 SmoothScroller \u2014 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u0438\u0440\u0438\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0432\u043f\u0440\u0430\u0432\u043e, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 onTargetFound \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c action, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043d\u0430\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e <em>x<\/em> \u0438 <em>y<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438.<\/p>\n<pre><code class=\"kotlin\">action.update(        manager.getDx(x, Direction.Right, manager.state),        manager.getDy(y, Direction.Right, manager.state),        manager.swipeAnimationDuration,        manager.swipeAnimationInterpolator )<\/code><\/pre>\n<p>\u041d\u0430 onStart \u043c\u044b \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 (\u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430) \u2014 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 SnapHelper \u044d\u0442\u0438 \u0436\u0435\u0441\u0442\u044b \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0430\u043c\u0438\u0440\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438,<\/strong> \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043d\u0451\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438\u043b\u0438 \u0443\u043b\u0435\u0442\u0430\u0435\u0442.<\/p>\n<p><iframe id=\"60803629563ace6d7a18d820\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60803629563ace6d7a18d820\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/li>\n<\/ol>\n<p><iframe id=\"608036ab563ace6d7a18d821\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/608036ab563ace6d7a18d821\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<h3>2.2. \u0414\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 (\u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0451 \u043f\u0435\u0440\u0432\u043e\u0439), \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043b\u0430\u0432\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0432\u043e\u0439, \u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0438\u0437 \u043d\u0430 <em>dy<\/em> \u0442\u043e\u0447\u0435\u043a. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u0430\u0439\u043f\u043d\u0443\u043b \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044d\u043a\u0440\u0430\u043d\u0430, \u0432\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043e\u0441\u0438 <em>y<\/em> \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0439. \u0410 \u0442\u0440\u0435\u0442\u044c\u044f \u0442\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043b\u0430\u0432\u043d\u043e \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437, \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439.<\/p>\n<p><iframe id=\"6080376cd990706d645cc0c6\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/6080376cd990706d645cc0c6\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<h3>3. \u041f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u044f&nbsp;<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f RecyclerView, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b:<\/p>\n<p>\u2014 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0430 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438;<\/p>\n<p>\u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438;<\/p>\n<p>\u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043f\u043e\u0441\u043b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438);<\/p>\n<p>\u2014 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u2014 \u0437\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0441\u043a\u0435\u043b\u0435\u0442\u043e\u043d\u0430);<\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430);<\/p>\n<\/li>\n<li>\n<p>\u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u043f\u0443\u0441\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435);<\/p>\n<\/li>\n<li>\n<p>\u043e\u0448\u0438\u0431\u043a\u0438 (\u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u00ab\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c\u00bb).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>4. \u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h3>\n<p>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430\u0445, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u043e\u043d\u0438 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u0438 \u0434\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0435\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u043a\u0435\u0448: \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043f\u0435\u0440\u0451\u0434, \u043f\u043e \u043a\u043e\u043b\u0431\u044d\u043a\u0443 \u0441\u043a\u0440\u043e\u043b\u043b\u0430. \u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0438 \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u043a\u0435\u0448\u0430.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0447\u0435\u0440\u0435\u0437 RecyclerView, \u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u0435. \u041d\u0430\u043c \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b FirstVisiblePositionProvider \u0438 LastVisiblePositionProvider. \u041f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0435\u043c \u2014 topPosition, \u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u2014 \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0437 \u0447\u0438\u0441\u0435\u043b:&nbsp;<\/p>\n<ol>\n<li>\n<p>topPosition + \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"kotlin\">class UsersDiscoverLayoutManager : RecyclerView.LayoutManager(),     RecyclerView.SmoothScroller.ScrollVectorProvider,     FirstVisiblePositionProvider,     LastVisiblePositionProvider {     ...     override fun getFirstVisiblePosition() = topPosition     override fun getLastVisiblePosition() =          (topPosition + visibleCards).coerceIn(0, itemCount - 1) }<\/code><\/pre>\n<h3>5. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<ul>\n<li>\n<p><strong>setHasFixedSize(boolean)<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432 true, \u0442\u043e \u044d\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0438\u043b\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 RecyclerView \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u0441\u043e\u0442\u0443 \u0438\u043b\u0438 \u0448\u0438\u0440\u0438\u043d\u0443. \u0412\u043b\u0430\u0434\u0435\u044f \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439, RecyclerView \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b setHasFixedSize(true).<\/p>\n<ul>\n<li>\n<p><strong>Adapter.setHasStableIds(boolean)<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c true, \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 RecyclerView, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0439, \u0435\u0449\u0451 \u0438 \u043d\u0430 stableId \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.&nbsp;<\/p>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c stableId \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e ViewHolder \u2014 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 RecyclerView \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044c\u044e\u0445\u0438, \u0435\u0441\u043b\u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 stableId \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b setHasStableIds(true).<\/p>\n<ul>\n<li>\n<p><strong>setNestedScrollingEnabled(boolean)<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u0442\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 false. \u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0436\u0435\u0441\u0442\u043e\u0432. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b \u0444\u043b\u0430\u0433 &nbsp;setNestedScrollingEnabled(false).<\/p>\n<h3>6. \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438<\/h3>\n<ol>\n<li>\n<p><strong>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0432\u043e\u044e ViewGroup \u0441 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0432\u044c\u044e\u0445. <\/strong>\u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0436\u0435\u0441\u0442\u044b \u0431\u0440\u043e\u0441\u043a\u0430 (\u0444\u043b\u0438\u043d\u0433) \u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 AdapterView \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0435\u043c\u0443 \u0432\u044c\u044e\u0445\u0443. \u041c\u0438\u043d\u0443\u0441 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044c\u044e\u0445\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c\u0438. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438, \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 RecyclerView: &nbsp;\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430, \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MotionLayout. <\/strong>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u044d\u043a\u0440\u0430\u043d. \u0418\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 \u2014 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043e\u0434\u0430, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 xml. \u041c\u0438\u043d\u0443\u0441\u044b \u0442\u0435 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435: \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044c\u044e\u0445\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ViewPager \u0441 PageTransformer. <\/strong>\u041d\u043e \u043c\u0438\u043d\u0443\u0441\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435, \u0432 \u0441\u0438\u043b\u0435 \u0438 \u0437\u0434\u0435\u0441\u044c.<\/p>\n<\/li>\n<\/ol>\n<h3>7. \u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0439, \u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 RecyclerView \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c LayoutManager, \u0442\u043e \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0442.\u202f\u0434. \u0410 \u0435\u0449\u0451 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c LayoutManager \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, LinearLayoutManager \u0438\u043b\u0438 GridLayoutManager. \u0418, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043b\u0438 \u0441\u0435\u0442\u043a\u0443. \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<\/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=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/553642\/\"> https:\/\/habr.com\/ru\/company\/vk\/blog\/553642\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441 \u0417\u0430\u0433\u0443\u043c\u0435\u043d\u043d\u043e\u0432, \u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043b\u0435\u043d\u0442\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435. \u041c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u043d\u043e\u0439 \u043b\u0435\u043d\u0442\u043e\u0439, \u0441\u0442\u0435\u043d\u043e\u0439, \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c \u00ab\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438\u00bb, \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, VK Donut, \u043f\u043e\u0434\u043a\u0430\u0441\u0442\u0430\u043c\u0438 \u0438 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u043e\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u043c, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c.<\/p>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/552162\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u0445 \u0432 \u043e\u0431\u0449\u0435\u043c, \u0430 \u0432 \u044d\u0442\u043e\u0439 \u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 \u043d\u0430 Android-\u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0435 \u0432\u044b\u0448\u0435 \u2014 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435, \u043f\u0443\u0448 \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 (\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u0434\u0435\u043b\u0430\u043b \u044f, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f). \u0415\u0441\u043b\u0438 \u0432\u044b \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435, \u043e\u043a\u0430\u0436\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u044f\u0432\u043e\u043a \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439. \u042d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439. \u041c\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u044d\u043a\u0440\u0430\u043d \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u2014 \u0431\u044b\u043b\u0430 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u044f\u0432\u043e\u043a \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u044d\u043a\u0440\u0430\u043d\u0443, \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u043b\u0435\u0432\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u043e. \u0422\u0430\u043a \u043e\u043d\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0442, \u043a\u0430\u043a \u0438 \u0432 \u043a\u0430\u043a\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0438\u0445 \u043d\u0430\u0434\u043e \u0441\u0432\u0430\u0439\u043f\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0433\u043e-\u0442\u043e \u0432 \u0434\u0440\u0443\u0437\u044c\u044f \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u044f\u0432\u043a\u0443.&nbsp;<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0421\u0432\u0430\u0439\u043f \u0432\u043f\u0440\u0430\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443, \u0430 \u0432\u043b\u0435\u0432\u043e \u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0451. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438, \u0441\u043c\u0430\u0445\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u043b\u0435\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438\u0445, \u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442 \u043d\u0430\u0441 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f. \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u0432\u0430\u0439\u043f\u0430\u0442\u044c, \u0430 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u043d\u0438\u0437\u0443: \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0430\u043c\u0438 \u0443\u043b\u0435\u0442\u044f\u0442 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>\u0417\u0430\u044f\u0432\u043a\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0442\u044c. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0443 \u0432 \u0434\u0440\u0443\u0437\u044c\u044f, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438, \u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u2014 \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0443\u0431\u0435\u0434\u0438\u043b\u0441\u044f, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0410 \u0435\u0449\u0451 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a, \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0445 \u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430.<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0430\u0442\u044c\u0438<\/h3>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<p>1.1. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView.<\/p>\n<p>1.2. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 LayoutManager.<\/p>\n<p>1.3. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SnapHelper.<\/p>\n<p>1.4. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 SmoothScroller.<\/p>\n<p>1.5. ScrollVectorProvider.<\/p>\n<p>1.6. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044c\u044e\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a.<\/p>\n<p>2.1. \u041e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>2.2. \u0414\u0432\u0443\u0445\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0432\u043e\u0434.<\/p>\n<\/li>\n<\/ol>\n<h3>1. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438 \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 RecyclerView \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c LayoutManager. RecyclerView \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432 LayoutManager \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441 \u0442\u0430\u043a\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c RecyclerView \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0433\u0438\u0431\u043a\u043e: \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0432\u043e\u044f \u0437\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>LayoutManager \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. SnapHelper \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u043e\u043b\u043b \u00ab\u043f\u0440\u0438\u043c\u0430\u0433\u043d\u0438\u0447\u0438\u0432\u0430\u043b\u0441\u044f\u00bb \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0441\u043f\u0438\u0441\u043a\u0430. SmoothScroller \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 ItemAnimator \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u0435\u0442 \u0432\u044c\u044e\u0445\u0438, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430.<\/p>\n<h3>1.1. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445:<\/p>\n<ol>\n<li>\n<p><strong>RecycledViewPool<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u044b \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 RecycledViewPool \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043b\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0432\u044c\u044e\u043f\u0443\u043b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e RecyclerView \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0438 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 RecycledViewPool<em> <\/em>\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u2014 \u0432 \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u043a\u0430\u0434\u0440\u0430 \u0434\u043e \u043a\u0430\u0434\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043a\u0440\u0430\u043f<\/strong> \u2014 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 RecyclerView \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u043e \u0435\u0441\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c position \u0438 itemId \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 itemViewType. \u042d\u0442\u043e\u0442 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043a \u0434\u0440\u0443\u0433\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u043c\u0443, \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0451\u043d \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 stableId.&nbsp;<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0441\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0432\u044c\u044e\u0445\u0430 \u2014 \u044d\u0442\u043e \u0442\u0430, \u0447\u0442\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 RecyclerView, \u043d\u043e \u0431\u044b\u043b\u0430 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 RecyclerView. \u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u043a\u0440\u0430\u043f \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043d\u0435\u0433\u043e \u0432\u044c\u044e\u0445 \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043b\u0451\u0433\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0432\u044c\u044e\u043f\u0443\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043b\u0430\u0441\u0441 Recycler <\/strong>\u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u0437\u0430\u0441\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 RecyclerView \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>ChildHelper <\/strong>\u2014<strong> <\/strong>\u044d\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 RecyclerView. \u0412 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u041f\u0435\u0440\u0432\u044b\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0435\u0441\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438 \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 ViewGroup: getChildAt, getChildCount \u0438 \u0442.\u202f\u0434. \u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u2014 \u0432 \u043d\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b getUnfilteredChildCount \u0438\u043b\u0438 getUnfilteredChildAt.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 ChildHelper \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0432\u044c\u044e\u0445. \u041e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043d\u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e. \u0412\u0441\u0435 \u0432\u044c\u044e\u0445\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 RecyclerView.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0435\u0448 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u0432 Recycler. <\/strong>\u0423 \u044d\u0442\u043e\u0433\u043e \u043a\u0435\u0448\u0430 \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0440\u0430\u0432\u0435\u043d 2. \u0415\u0441\u043b\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439, \u043d\u0435 \u0443\u0434\u0430\u043b\u0451\u043d, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435), \u0442\u043e \u043e\u043d \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0435\u0448. \u0415\u0441\u043b\u0438 \u043a\u0435\u0448 \u043f\u043e\u043b\u043e\u043d, \u0442\u043e \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 RecycledViewPool. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b \u0432 \u044d\u0442\u043e\u0442 \u043a\u0435\u0448, \u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 RecycledViewPool<em>. <\/em>\u041c\u043e\u0436\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0430 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 Recycler.setViewCacheSize. \u041d\u043e \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 setViewCacheSize, \u043f\u043b\u044e\u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044c\u044e\u0445 \u0432 \u043f\u0440\u0435\u0444\u0435\u0442\u0447\u0435.<\/p>\n<\/li>\n<li>\n<p>RecyclerView \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044c\u044e\u0445<\/strong>, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u042d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 ViewCacheExtension.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0441\u043a\u0440\u0430\u043f\u044b \u0438 \u043a\u0435\u0448\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432\u044c\u044e\u0445\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0438\u043b\u0438 \u0432 RecyclerView, \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u043c\u0438 \u0432\u044c\u044e\u0445\u0430\u043c\u0438. \u0410 RecycledViewPool \u2014 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0434\u043b\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044c\u044e\u0445\u0438 \u0432 LayoutManager \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 Recycler \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 recycler.getViewForPosition(position). \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 Recycler \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0432\u044c\u044e\u0445\u0443 \u0432 \u0441\u043a\u0440\u0430\u043f\u0430\u0445 \u0438 \u043a\u0435\u0448\u0430\u0445 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435), \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 getViewForPosition \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u0443 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435,<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u043e\u043d \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 getViewForPosition(position) Recycler \u0438\u0449\u0435\u0442 \u0432\u044c\u044e\u0445\u0443 \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435:&nbsp;<\/p>\n<ol>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044c\u044e\u0445 \u2014 \u0438\u0449\u0435\u0442 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 (\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u043a\u0440\u0430\u043f\u0430). \u0410 \u0437\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442, \u0442\u043e \u043f\u043e stableId (\u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 setHasStableId(true)).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u044c\u044e\u0445 \u2014 \u043f\u043e\u0438\u0441\u043a \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u0434\u0451\u0442 \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0432\u044c\u044e\u0445 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e: \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u044e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f) \u0432 ChildHelper, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0435\u0448\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 Recycler, \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043a\u0440\u0430\u043f\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e stableId (\u0435\u0441\u043b\u0438 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 setHasStableId(true)).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0435\u0448\u0435 \u0432\u044c\u044e\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432 Recycler \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e stableId (\u0441 \u0442\u0435\u043c \u0436\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u043c \u043a\u0435\u0448\u0435 ViewCacheExtension \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u0438 \u0442\u0438\u043f\u0443 (\u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c).<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0443\u043b\u0435 RecycledViewPool \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u0438\u043f\u0443.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>1.2. \u041a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 LayoutManager<\/h3>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430 LayoutManager \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 onLayout \u0438 onMeasure \u0443 \u0432\u044c\u044e\u0433\u0440\u0443\u043f\u043f\u044b. \u041d\u043e \u0443 \u043d\u0435\u0433\u043e \u0441\u0432\u043e\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430: \u0432 \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043e, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u043b\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043f\u0438\u0441\u043a\u0430. LayoutManager \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0432 RecyclerView, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LayoutManager \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0430.<\/p>\n<p>\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043b\u0431\u044d\u043a\u0435:<\/p>\n<pre><code class=\"kotlin\">fun onLayoutChildren(recycler: Recycler, state: State)<\/code><\/pre>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u044f \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a, RecyclerView \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u044c\u044e\u0445\u0438, \u0430 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 State \u0438 Recycler. State \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 RecyclerView<em>:<\/em><\/p>\n<ol>\n<li>\n<p>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0448\u0430\u0433 \u043b\u0435\u0439\u0430\u0443\u0442\u0430 (STEP_START \u2014 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u043e, STEP_LAYOUT \u2014 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043b\u0435\u0439\u0430\u0443\u0442\u0430, STEP_ANIMATIONS \u2014 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435).<\/p>\n<\/li>\n<li>\n<p>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 (\u0434\u043b\u044f SmoothScroller).<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0435 \u043f\u0440\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043b\u0435\u0439\u0430\u0443\u0442\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0438\u0437 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043b\u0435\u0439\u0430\u0443\u0442\u0430 \u0438 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 RecyclerView.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 id \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u043a\u0443\u0441. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u044f\u044f \u0432\u044c\u044e\u0445\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0435\u0451 id. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u043b\u0435\u0439\u0430\u0443\u0442\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u044c\u044e\u0445\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0444\u043e\u043a\u0443\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>RecyclerView \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0432\u043e \u0432\u0441\u0435 \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 State. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443. \u042d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0447\u0435\u0440\u0435\u0437 SparseArray&lt;Object&gt;. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044f \u0437\u0430 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0446\u0438\u043a\u043b\u0430\u043c\u0438.<\/p>\n<p>Recycler \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u044c\u044e\u0445\u0438 \u0432 \u0441\u043a\u0440\u0430\u043f \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044c\u044e\u0445\u0443 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.&nbsp;<\/p>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 onLayoutChildren \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0440\u0438 \u0432\u0435\u0440\u0445\u043d\u0438\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c. \u0422\u0430\u043c \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0432\u044b\u0448\u043b\u0430 \u0437\u0430<\/p>\n<\/div>\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-322128","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322128","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=322128"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/322128\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}