{"id":329988,"date":"2022-02-22T15:04:11","date_gmt":"2022-02-22T15:04:11","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=329988"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=329988","title":{"rendered":"<span>\u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u0442\u0435\u043d\u0435\u0439<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/9a9\/d9d\/a93\/9a9d9da931bdc946323b2feded7137ef.jpg\" width=\"780\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9a9\/d9d\/a93\/9a9d9da931bdc946323b2feded7137ef.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u043b\u044e\u0431\u0438\u043c \u0441\u0432\u043e\u0438\u0445 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0442\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0435 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439, \u0430 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u0442\u0435\u043d\u0438 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u0442\u0435\u043d\u044f\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043e\u0434\u043d\u0443, \u0430 \u0446\u0435\u043b\u044b\u0445 \u0441\u0435\u043c\u044c \u0442\u0435\u043d\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/9e9\/b59\/792\/9e9b59792d3dc523152aa4490adaf89e.jpeg\" width=\"500\" height=\"281\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e9\/b59\/792\/9e9b59792d3dc523152aa4490adaf89e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0430\u043c\u0430\u044f <s>\u0441\u043b\u043e\u0436\u043d\u0430\u044f<\/s> \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0442\u0435\u043d\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/801\/635\/945\/801635945a9235f36aeb9f29722fe6ad.png\" width=\"2026\" height=\"802\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/801\/635\/945\/801635945a9235f36aeb9f29722fe6ad.png\"\/><figcaption><\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0443\u0442 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>0px \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 X;<\/p>\n<\/li>\n<li>\n<p>11px \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 Y;<\/p>\n<\/li>\n<li>\n<p>15px \u2014 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0442\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>#00000040 \u2014 \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0430\u044f \u0442\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0443\u0442 \u043d\u0435 \u043e\u0434\u043d\u0430, \u0430 \u0446\u0435\u043b\u044b\u0445 \u0442\u0440\u0438 \u0442\u0435\u043d\u0438.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/61c\/fea\/fa3\/61cfeafa397a8555c4e16e311c4794ff.jpeg\" width=\"400\" height=\"299\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/61c\/fea\/fa3\/61cfeafa397a8555c4e16e311c4794ff.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 Figma \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/991\/f98\/45c\/991f9845c222250cf6fd830a93c5d357.png\" width=\"450\" height=\"544\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/991\/f98\/45c\/991f9845c222250cf6fd830a93c5d357.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0435\u043c\u044c \u0442\u0435\u043d\u0435\u0439 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u043d\u043e\u0433\u043e<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b27\/cce\/a6c\/b27ccea6c9deb07a53b9891c812384b6.png\" width=\"668\" height=\"1680\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b27\/cce\/a6c\/b27ccea6c9deb07a53b9891c812384b6.png\"\/><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438 \u0444\u0438\u0433\u0443\u0440\u044b \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u0430 <s>\u0437\u043e\u043b\u043e\u0442\u044b\u0435<\/s><strong> <\/strong>\u0441\u043b\u043e\u0436\u043d\u044b\u0435 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"https:\/\/github.com\/MartinRGB\/sketch-smooth-corner-android\">Sketch Smooth Corner<\/a> \u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Squircle\">Squircle<\/a>), \u043c\u044b \u0440\u0438\u0441\u0443\u0435\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Path. \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043d\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443, \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440 \u0442\u0435\u043d\u0438, \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0443 \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <a href=\"https:\/\/github.com\/MartinRGB\/sketch-smooth-corner-android\">Sketch Smooth Corner<\/a> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438 (\u0440\u0430\u0434\u0438\u0443\u0441 \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u044f\u0432\u043d\u043e), \u0430 \u0434\u043b\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Squircle\">Squircle<\/a> \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438, \u043d\u043e \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c, \u0440\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0422\u0430\u043a\u0436\u0435 \u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Path<\/code> \u0434\u043b\u044f <code>Outline<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Path#isConvex()\">\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c<\/a>. \u042d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430. \u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/652955\/#1\">\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/a> \u0442\u0435\u043d\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043d\u0435\u0439 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p>API \u2265 21.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"kotlin\">\/**  * \u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u0430\u044f \u0442\u0435\u043d\u044c \u0434\u0438\u0437\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u044b  *  * @param name - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043d\u0438  * @param layers - \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u043d\u0435\u0439  *\/ @Parcelize data class CustomShadowParams(     val name: String,     val layers: List&lt;Shadow> ) : Parcelable   \/**  * \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043d\u0438  *  * @Param dX - \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 X  * @Param dY - \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 Y  * @Param radius - \u0440\u0430\u0434\u0438\u0443\u0441 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0442\u0435\u043d\u0438  * @Param color - \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438  * @Param colorAlpha - \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0442\u0435\u043d\u0438  *\/ @Parcelize data class Shadow(     @Px val dX: Float,     @Px val dY: Float,     @Px val radius: Float,     @ColorInt val color: Int,     @FloatRange(from = 0.0, to = 1.0) val colorAlpha: Float ) : Parcelable <\/code><\/pre>\n<p>\u0426\u0432\u0435\u0442 \u0442\u0435\u043d\u0438 \u0438 \u0435\u0451 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0442\u0443\u0442 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>CustomShadowParams.shadow2()<\/code>:<\/p>\n<pre><code class=\"kotlin\">fun shadow2(): CustomShadowParams {     return CustomShadowParams(         name = \"Shadow 2\",         listOf(             Shadow(                 dX = 0.toPx,                 dY = 2.toPx,                 radius = 9.toPx,                 color = Color.BLACK,                 colorAlpha = 0.14f             )         )     ) }<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043d\u0435\u0439 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u044b \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438. \u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\">https:\/\/github.com\/ussernamenikita\/AndroidShadows<\/a>.<\/p>\n<h2>\u041e\u0431\u0437\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0432\u0430\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0431\u044f \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043f\u0438\u0441\u0435\u0446 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0418 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u044b \u0438\u0434\u0451\u043c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u0440\u0430\u0442\u043d\u0438\u043a\u0443 Android SDK:<\/p>\n<h3>Outline + elevation<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 SDK, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <code>elevation<\/code>\u00a0\u0438 <code>Outline<\/code>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0442\u0435\u043d\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0444\u043e\u0440\u043c\u043e\u0439 \u0442\u0435\u043d\u0438 \u0438 \u0435\u0451 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">val view = View(context) val layer = CustomShadowParams.shadow2().layers[0] view.outlineProvider = object : ViewOutlineProvider() {     override fun getOutline(view: View, outline: Outline) {         outline.setRoundRect(             layer.dX.toInt(),             layer.dY.toInt(),             layer.dX.toInt() + view.width,             layer.dY.toInt() + view.height,             buttonCornerRadius         )     } } view.elevation = layer.radius<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0442\u0435\u043d\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/426\/48b\/7b8\/42648b7b8506cba2d1e59eca8462db0d.png\" width=\"752\" height=\"290\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/426\/48b\/7b8\/42648b7b8506cba2d1e59eca8462db0d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u043d\u0438 \u0438\u0437 \u0441\u0435\u043c\u0438. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e SDK \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0426\u0432\u0435\u0442 \u0442\u0435\u043d\u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u043a\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0442\u0435\u043d\u0438, \u043d\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f; \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>elevation<\/code>, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e. \u041d\u043e \u0442\u0435\u043d\u0438 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0430\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0414\u043b\u044f API > 28 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b <code>outlineAmbientShadowColor<\/code> \u0438 <code>outlineSpotShadowColor<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <code>Color.RED<\/code>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da0\/5c8\/584\/da05c85849ccf076c3c02bb9c2061695.png\" width=\"836\" height=\"362\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da0\/5c8\/584\/da05c85849ccf076c3c02bb9c2061695.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0426\u0432\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0442\u0435\u043d\u0438 \u043d\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<h3>9-patch<\/h3>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b8a\/c3a\/d2f\/b8ac3ad2fa3e2847b8f4b9a45fd24c6e.jpeg\" width=\"480\" height=\"854\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b8a\/c3a\/d2f\/b8ac3ad2fa3e2847b8f4b9a45fd24c6e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f 9-patch. \u042f \u0438\u0441\u043a\u0440\u0435\u043d\u043d\u0435 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u044d\u0442\u0438\u043c \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u0440\u043e\u0442\u0435\u043d\u044c\u043a\u043e \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u0415\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u0432 9-patch \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f \u0443\u0433\u043e\u0434\u043d\u043e \u0442\u0435\u043d\u044c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0443\u0433\u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u043d\u0435\u0439. \u0418 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab\u043a\u0440\u0438\u0432\u043e\u0441\u0442\u044c\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c 9-patch \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u043d\u0435\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a1\/2c9\/bd8\/8a12c9bd859b399366c6cc737ccfe734.png\" width=\"1308\" height=\"1328\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a1\/2c9\/bd8\/8a12c9bd859b399366c6cc737ccfe734.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0438\u043d\u0438\u043c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 <code>View<\/code>. \u0410 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0438 \u043a\u0440\u0430\u044f\u043c\u0438, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0439 <code>View<\/code>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u0435\u043d, \u0438 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f 9-patch.<\/p>\n<h3>MaterialShapeDrawable<\/h3>\n<p>\u0411\u043b\u0443\u0436\u0434\u0430\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/developer.android.com\/reference\/com\/google\/android\/material\/shape\/MaterialShapeDrawable\">MaterialShapeDrawable<\/a>. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u044b. \u041f\u043e \u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u0443\u043c\u0435\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<pre><code>val shadowDrawable = MaterialShapeDrawable(     ShapeAppearanceModel         .Builder()         .setAllCornerSizes(buttonCornerRadius)         .build() )  val view = View(context) val layer = CustomShadowParams.shadow2().layers[0] with(shadowDrawable) {     fillColor = ColorStateList.valueOf(buttonColor)     setShadowColor(layer.colorWithAlpha)     elevation = layer.radius     shadowCompatibilityMode = MaterialShapeDrawable.SHADOW_COMPAT_MODE_ALWAYS } view.background = shadowDrawable<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u0442\u0435\u043d\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7e2\/ae8\/3b7\/7e2ae83b70dd6e9463e489fc7420f647.png\" width=\"940\" height=\"364\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e2\/ae8\/3b7\/7e2ae83b70dd6e9463e489fc7420f647.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u043d\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0442\u0435\u043d\u0438, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442. \u0422\u043e \u0435\u0441\u0442\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043d\u0438 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0435\u043d\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u0439, \u0447\u0435\u043c <code>elevation<\/code> + <code>Outline<\/code>. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043d\u044c \u0432 MaterialShapeDrawable \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Bitmap<\/code>, \u0430 \u044d\u0442\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c.<\/p>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u0413\u043e\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u043d\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 <code>Drawable<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>Bitmap<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h3>ScriptIntrinsicBlur<\/h3>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u0442\u0435\u043d\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0442\u0442\u0435\u043d\u043a\u0430 \u0441\u0435\u0440\u043e\u0433\u043e. \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0432 Android SDK \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/developer.android.com\/reference\/android\/renderscript\/ScriptIntrinsicBlur\">ScriptIntrinsicBlur<\/a><strong>. <\/strong>\u0422\u0443\u0442, \u043a\u0440\u043e\u043c\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e API, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u044f\u0434\u043e\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u043a\u0440\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430 \u0432\u0441\u044e \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0432 25 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u044f\u0432\u0438\u043c \u0441\u043c\u0435\u043a\u0430\u043b\u043a\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>radius\/25<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043c\u044b\u0432\u0430\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e <code>ScriptIntrinsicBlur<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <code>bitmap<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435.<\/p>\n<p>\u041a\u043e\u0434 \u044f \u0442\u0443\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432 \u043d\u0451\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c <code>Bitmap<\/code>, \u0440\u0438\u0441\u0443\u0435\u043c \u0432 \u043d\u0451\u043c \u043d\u0430\u0448\u0443 \u0444\u0438\u0433\u0443\u0440\u0443, \u0440\u0430\u0437\u043c\u044b\u0432\u0430\u0435\u043c \u0435\u0451 \u0438 \u0441\u0432\u0435\u0440\u0445\u0443 \u0440\u0438\u0441\u0443\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443 \u0431\u0435\u043b\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0441\u0451 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434, \u043e\u0441\u0442\u0430\u0432\u043b\u044e <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\/blob\/master\/app\/src\/main\/java\/com\/example\/composeshadows\/ui\/view\/ScriptIntrinsicBlurShadowsView.kt\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a>.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c1b\/196\/43b\/c1b19643bf8479bd128a4bd026dafd59.png\" width=\"960\" height=\"400\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c1b\/196\/43b\/c1b19643bf8479bd128a4bd026dafd59.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u043d\u0438: \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0440\u0430\u0434\u0438\u0443\u0441, \u0446\u0432\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 <code>ScriptIntrinsicBlur<\/code> \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>bitmap<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u044d\u0442\u043e\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u041d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0442\u0431\u0438\u0432\u0430\u044e\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>SetShadowLayer<\/h3>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0432, \u0447\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e <code>ScriptIntrinsicBlur<\/code> \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u043f\u043e\u0438\u0441\u043a\u0438. \u0418 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Paint#setShadowLayer(float,%20float,%20float,%20int)\">setShadowLayer<\/a> \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Paint<\/code>. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u043e, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u043c \u00ab\u043d\u0435\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442\u00bb. \u041f\u0440\u0430\u0432\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u043a\u0441\u0442\u0430, \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e <a href=\"https:\/\/developer.android.com\/guide\/topics\/graphics\/hardware-accel.html#unsupported\">\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435<\/a>. \u0418 \u0435\u0441\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 <code>View<\/code>, \u0442\u043e \u0442\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c <code>Paint<\/code>. \u0422\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0434\u0435\u0432\u044f\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <code>Android<\/code>, \u0430 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041a\u043e\u0434 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 <code>Drawable<\/code>, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0430\u043c\u0443 <code>View<\/code>, \u0432\u0435\u0434\u044c \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <code>canvas<\/code>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c:<\/p>\n<pre><code class=\"kotlin\">private val shadowPaint = Paint(Paint.ANTI_ALIAS_FLAG) private val backgroundPaint = Paint(Paint.ANTI_ALIAS_FLAG)  override fun onDraw(canvas: Canvas) {     super.onDraw(canvas)     shadowParams.layers.forEach {         shadowPaint.setShadowLayer(it.radius, it.dX, it.dY, it.colorWithAlpha)         canvas.drawRoundRect(             0f,             0f,             width.toFloat(),             height.toFloat(),             roundRadius,             roundRadius,             shadowPaint         )     }     canvas.drawRoundRect(         0f,         0f,         width.toFloat(),         height.toFloat(),         roundRadius,         roundRadius,         backgroundPaint     ) }<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ca\/161\/fe7\/9ca161fe79fce2b646279db8df400996.png\" width=\"958\" height=\"372\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ca\/161\/fe7\/9ca161fe79fce2b646279db8df400996.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f Android &lt; 9 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <code>View<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0447\u0435\u043d\u044c \u0434\u043e\u0441\u0430\u0434\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Android, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f, \u0430 \u043a\u0430\u043a \u0441\u0430\u043c\u0430 \u041e\u0421 \u0440\u0438\u0441\u0443\u0435\u0442 \u0442\u0435\u043d\u044c? \u0420\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u043a\u0443\u0434\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 <code>Outline<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 <code>View<\/code>. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 <code>RenderNode<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">public boolean setOutline(@Nullable Outline outline) {     if (outline == null) {         return nSetOutlineNone(mNativeRenderNode);     }      switch (outline.mMode) {         case Outline.MODE_EMPTY:             return nSetOutlineEmpty(mNativeRenderNode);         case Outline.MODE_ROUND_RECT:             return nSetOutlineRoundRect(mNativeRenderNode,                 outline.mRect.left, outline.mRect.top,                 outline.mRect.right, outline.mRect.bottom,                 outline.mRadius, outline.mAlpha);         case Outline.MODE_PATH:             return nSetOutlinePath(mNativeRenderNode, outline.mPath.mNativePath,                     outline.mAlpha);     }      throw new IllegalArgumentException(\"Unrecognized outline?\"); }<\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434 \u043b\u0435\u0437\u0442\u044c \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 SDK \u043d\u0430  <a href=\"https:\/\/cs.android.com\/\">https:\/\/cs.android.com\/<\/a>. \u0412 \u043c\u0430\u0441\u0442\u0435\u0440-\u0432\u0435\u0442\u043a\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>ViewGroup<\/code> \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/cs.android.com\/android\/platform\/superproject\/+\/master:frameworks\/layoutlib\/bridge\/src\/android\/view\/RectShadowPainter.java;drc=master;bpv=1;bpt=1;l=44?gsn=RectShadowPainter&amp;gs=kythe%3A%2F%2Fandroid.googlesource.com%2Fplatform%2Fsuperproject%3Flang%3Djava%3Fpath%3Dandroid.view.RectShadowPainter%23234030b499d1f7808fe8b45fdfce744adfa90ad032ab6e872c2095075c59b3dc\">RectShadowPainter<\/a>. \u041e\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u0440\u0438\u0441\u0443\u0435\u0442 \u0442\u0435\u043d\u044c \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041a \u0441\u043b\u043e\u0432\u0443, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 MaterialShapeDrawable.<\/p>\n<h3>CompatShadowRenderer<\/h3>\n<p>\u0422\u0430\u043a \u043c\u044b \u043d\u0430\u0437\u0432\u0430\u043b\u0438 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u044e <code>RectShadowPainter<\/code>. \u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430. \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u0438 \u0442\u043e\u0447\u043a\u0438 \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/99a\/e86\/355\/99ae8635506744996e2d0c6b173ca3fc.png\" width=\"1870\" height=\"1132\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/99a\/e86\/355\/99ae8635506744996e2d0c6b173ca3fc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439:<\/p>\n<pre><code class=\"kotlin\">\/**  * \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0447\u0435\u043a \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430  *  * @param point - \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430.  * 0.0 - \u043d\u0430\u0447\u0430\u043b\u043e \u0433\u0440\u0430\u0434\u0438\u043d\u0435\u0442\u0430. 1.0 - \u043a\u043e\u043d\u0435\u0446 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430  *  * @param colorMultiplier - \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u0442\u043e\u0447\u043a\u0435.  * 0.0 - \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438, 1.0 - \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0446\u0432\u0435\u0442  *\/ @Parcelize data class GradientPointAndColorMultiplier(     @FloatRange(from = 0.0, to = 1.0) val point: Float,     @FloatRange(from = 0.0, to = 1.0) val colorMultiplier: Float ) : Parcelable  **  * \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430  *  * @param colorsAndPoints - \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430   * \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u043e\u0432 \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435  *\/ @Parcelize class GradientParams(     val colorsAndPoints: List&lt;GradientPointAndColorMultiplier> ) : Parcelable<\/code><\/pre>\n<p>\u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u043c\u044b \u043e\u043f\u0438\u0448\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438\u0437 \u043f\u0430\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041e\u0434\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u0447\u043a\u0443 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442 0 \u0434\u043e 1, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430. \u0418 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438 \u0443 \u043d\u0430\u0441 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u0443\u0442 \u0443\u0434\u043e\u0431\u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 0 \u0434\u043e 1. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u043d\u0438 <code>Shadow2<\/code> \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u0430\u043a\u0438\u043c\u0438:<\/p>\n<pre><code class=\"kotlin\">GradientParams(     listOf(         GradientPointAndColorMultiplier(0f, 0.6f),         GradientPointAndColorMultiplier(0.75f, 0.10f),         GradientPointAndColorMultiplier(1f, 0f)     ) )<\/code><\/pre>\n<p>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/LinearGradient\">\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e<\/a> \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d \u0438 <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/RadialGradient\">\u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e<\/a> \u0434\u043b\u044f \u0443\u0433\u043b\u043e\u0432. \u041c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e:<\/p>\n<pre><code class=\"kotlin\">private fun createCornerParams(): GradientParams {     val innerShadowSize = innerShadowSize     val points = sideGradientParams.getPoints().map { point ->         val pointsInPixelsInLinearGradient = (shadowSize + innerShadowSize) * point         val radialGradientStartPoint = outlineCornerRadius - innerShadowSize         (pointsInPixelsInLinearGradient + radialGradientStartPoint) \/ outerArcRadius     }     val newColorsAndPoints = sideGradientParams         .colorsAndPoints         .mapIndexed { index, gradientPointAndValue -> gradientPointAndValue.copy(point = points[index]) }     return GradientParams(newColorsAndPoints) }<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<ul>\n<li>\n<p><code>shadowSize<\/code> \u2014 \u0440\u0430\u0434\u0438\u0443\u0441 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><code>innerShadowSize<\/code> \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043d\u0438 \u0432\u043d\u0443\u0442\u0440\u044c \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b: \u0438 \u043e\u0442 \u0444\u0438\u0433\u0443\u0440\u044b, \u0438 \u00ab\u043f\u043e\u0434\u00bb \u043d\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p><code>outlineCornerRadius<\/code> \u2014 \u0440\u0430\u0434\u0438\u0443\u0441 \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p><code>outerArcRadius<\/code> \u2014 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0442\u043e\u0447\u043a\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430. \u0414\u0430\u043b\u0435\u0435 \u0440\u0438\u0441\u0443\u0435\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d \u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u0443\u0433\u043b\u043e\u0432. \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432\u00bb. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\/blob\/master\/app\/src\/main\/java\/com\/example\/composeshadows\/ui\/util\/CompatShadowsRenderer.kt\">\u0442\u0443\u0442<\/a>. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da9\/279\/270\/da927927068da853fd54c1730cbe0a5b.png\" width=\"960\" height=\"368\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da9\/279\/270\/da927927068da853fd54c1730cbe0a5b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043d\u0430\u0448\u0438\u043c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0448\u043b\u044f\u043f\u0435. \u041d\u0430 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 \u044f \u043e\u0431\u0440\u0430\u0434\u043e\u0432\u0430\u043b\u0441\u044f \u0438 \u043d\u0430\u0447\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0418 \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f <code>View<\/code>. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a? \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b5\/0d6\/323\/7b50d6323724b139711c67364a22c5e1.png\" width=\"686\" height=\"274\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b5\/0d6\/323\/7b50d6323724b139711c67364a22c5e1.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 <code>View<\/code> \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/71d\/a50\/a75\/71da50a7563a8dc67c5a5b53def19a70.jpeg\" width=\"754\" height=\"754\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/71d\/a50\/a75\/71da50a7563a8dc67c5a5b53def19a70.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0437\u0430\u0448\u0438\u0442\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>View<\/code>, \u0438 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u044d\u0442\u043e \u043c\u044b, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043c\u043e\u0436\u0435\u043c.<\/p>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e <code>ViewGroup<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0448\u0435\u0439 <code>CompatShadowRenderer<\/code> \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 <code>View<\/code>, \u0430 \u0435\u0451 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Jetpack Compose.<\/p>\n<\/li>\n<\/ul>\n<h3>Jetpack Compose<\/h3>\n<p>\u0414\u0430, \u0432 Jetpack Compose \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u044f \u0442\u0435\u043d\u0435\u0439 \u043d\u0435\u0442. \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 Compose \u043d\u0430\u043c \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \ud83d\ude42 Compose \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0435\u043d\u0435\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0451\u043c \u043d\u0430\u0448\u0438 \u0442\u0435\u043d\u0438 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041d\u043e \u0435\u0441\u0442\u044c <a href=\"https:\/\/issuetracker.google.com\/issues\/160665122?pli=1\">issue<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u0410 \u043f\u043e\u043a\u0430 \u043c\u044b \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 <code>CompatShadowRenderer<\/code> \u043f\u043e\u0434 Jetpack Compose. \u0411\u043b\u0430\u0433\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438. \u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c <code>Canvas<\/code> \u043d\u0430 <code>DrawScope<\/code>, <code>Paint<\/code> \u043d\u0430 <code>Brush<\/code>, \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c. \u0413\u043e\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\/blob\/master\/app\/src\/main\/java\/com\/example\/composeshadows\/ui\/util\/ComposeCompatShadowsRenderer.kt\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fff\/880\/596\/fff880596c96e129c07b7e5d3e3f5632.png\" width=\"790\" height=\"348\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fff\/880\/596\/fff880596c96e129c07b7e5d3e3f5632.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/350\/21a\/4ba\/35021a4ba8124fa9d0e0edf92004354b.png\" width=\"816\" height=\"366\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/350\/21a\/4ba\/35021a4ba8124fa9d0e0edf92004354b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Android SDK, \u0430 \u043d\u0438\u0436\u043d\u0438\u0439 \u2014 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Jetpack Compose. \u0420\u0430\u0437\u043d\u0438\u0446\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442, \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043f\u043e\u0431\u0435\u0434\u043e\u0439 \ud83d\ude42<\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c <code>Modifier<\/code>:<\/p>\n<pre><code class=\"kotlin\">fun Modifier.roundRectShadow(     customShadowParams: CustomShadowParams,     cornerRadius: Dp ) = this.then(ShadowDrawer(customShadowParams, cornerRadius))  private class ShadowDrawer(     private val customShadowParams: CustomShadowParams,     private val cornerRadius: Dp ) : DrawModifier {      private val composeCompatShadowsRenderer = ComposeCompatShadowsRenderer()      override fun ContentDrawScope.draw() {         customShadowParams.layers.forEach {             composeCompatShadowsRenderer.paintCompatShadow(                 canvas = this,                 outlineCornerRadius = cornerRadius.toPx(),                 shadow = it             )         }         drawContent()     } }<\/code><\/pre>\n<p>\u0418 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code class=\"kotlin\">Box(     modifier = Modifier         .width(Dp(buttonWidthDp))         .height(Dp(buttonHeightDp))         .roundRectShadow(             customShadowParams = shadowParams,             cornerRadius = Dp(buttonCornerRadiusDp)         )         .background(             color = buttonColor,             shape =RoundedCornerShape(                 topStart = Dp(buttonCornerRadiusDp),                 topEnd = Dp(buttonCornerRadiusDp),                 bottomEnd = Dp(buttonCornerRadiusDp),                 bottomStart = Dp(buttonCornerRadiusDp),             )         ) )<\/code><\/pre>\n<h2>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435?<\/h2>\n<p>\u0418\u043c\u0435\u0435\u043c \u0442\u044b\u0441\u044f\u0447\u0443 \u0438 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c \ud83d\ude42 \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043d\u0438 \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0433\u043e\u0434\u043d\u043e, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432 Android SDK, \u0438 \u0432 Jetpack Compose.<\/p>\n<p>\u0427\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c? \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0442\u043e \u0435\u0441\u0442\u044c <code>elevation<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0437\u043e\u043b\u043e\u0442\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u041c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 \u2014 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u00bb \u0432\u0441\u0435\u0433\u0434\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0442\u043e \u0432\u043e\u0442 \u0432\u0430\u043c <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\">\u0441\u0441\u044b\u043b\u043a\u0430<\/a> \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435. \u0422\u0430\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0442\u0435\u043d\u0435\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u0438\u0432\u044b\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/Miha-x64\/FiftyShades\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/a> \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u043f\u043e \u0446\u0435\u0445\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0438\u0441\u0443\u0435\u0442 \u0442\u0435\u043d\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u043c. \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u0436\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/citymobil\/blog\/652955\/\"> https:\/\/habr.com\/ru\/company\/citymobil\/blog\/652955\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041c\u044b \u043b\u044e\u0431\u0438\u043c \u0441\u0432\u043e\u0438\u0445 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u043e\u0432 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043c \u0442\u0430\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043d\u044b\u0435 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439, \u0430 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u0442\u0435\u043d\u0438 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u0442\u0435\u043d\u044f\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043e\u0432 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043e\u0434\u043d\u0443, \u0430 \u0446\u0435\u043b\u044b\u0445 \u0441\u0435\u043c\u044c \u0442\u0435\u043d\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0430\u043c\u0430\u044f <s>\u0441\u043b\u043e\u0436\u043d\u0430\u044f<\/s> \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0442\u0435\u043d\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u0435:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0443\u0442 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>0px \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 X;<\/p>\n<\/li>\n<li>\n<p>11px \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 Y;<\/p>\n<\/li>\n<li>\n<p>15px \u2014 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0442\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>#00000040 \u2014 \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0430\u044f \u0442\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0443\u0442 \u043d\u0435 \u043e\u0434\u043d\u0430, \u0430 \u0446\u0435\u043b\u044b\u0445 \u0442\u0440\u0438 \u0442\u0435\u043d\u0438.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 Figma \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435\u0433\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0435\u043c\u044c \u0442\u0435\u043d\u0435\u0439 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u043d\u043e\u0433\u043e<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438 \u0444\u0438\u0433\u0443\u0440\u044b \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u0430 <s>\u0437\u043e\u043b\u043e\u0442\u044b\u0435<\/s><strong> <\/strong>\u0441\u043b\u043e\u0436\u043d\u044b\u0435 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"https:\/\/github.com\/MartinRGB\/sketch-smooth-corner-android\">Sketch Smooth Corner<\/a> \u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Squircle\">Squircle<\/a>), \u043c\u044b \u0440\u0438\u0441\u0443\u0435\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Path. \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u0435\u043d\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443, \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440 \u0442\u0435\u043d\u0438, \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0443 \u043a\u043d\u043e\u043f\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f <a href=\"https:\/\/github.com\/MartinRGB\/sketch-smooth-corner-android\">Sketch Smooth Corner<\/a> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438 (\u0440\u0430\u0434\u0438\u0443\u0441 \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u044f\u0432\u043d\u043e), \u0430 \u0434\u043b\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Squircle\">Squircle<\/a> \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438, \u043d\u043e \u0441 \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c, \u0440\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0422\u0430\u043a\u0436\u0435 \u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Path<\/code> \u0434\u043b\u044f <code>Outline<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Path#isConvex()\">\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c<\/a>. \u042d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0432\u0435\u043d\u0434\u043e\u0440\u0430. \u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c <a href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/652955\/#1\">\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/a> \u0442\u0435\u043d\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043d\u0435\u0439 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p>API \u2265 21.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"kotlin\">\/**  * \u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u0430\u044f \u0442\u0435\u043d\u044c \u0434\u0438\u0437\u0430\u0439\u043d \u0441\u0438\u0441\u0442\u0435\u043c\u044b  *  * @param name - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043d\u0438  * @param layers - \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u043d\u0435\u0439  *\/ @Parcelize data class CustomShadowParams(     val name: String,     val layers: List&lt;Shadow> ) : Parcelable   \/**  * \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043d\u0438  *  * @Param dX - \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 X  * @Param dY - \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0441\u0438 Y  * @Param radius - \u0440\u0430\u0434\u0438\u0443\u0441 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0442\u0435\u043d\u0438  * @Param color - \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438  * @Param colorAlpha - \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0442\u0435\u043d\u0438  *\/ @Parcelize data class Shadow(     @Px val dX: Float,     @Px val dY: Float,     @Px val radius: Float,     @ColorInt val color: Int,     @FloatRange(from = 0.0, to = 1.0) val colorAlpha: Float ) : Parcelable <\/code><\/pre>\n<p>\u0426\u0432\u0435\u0442 \u0442\u0435\u043d\u0438 \u0438 \u0435\u0451 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0442\u0443\u0442 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>CustomShadowParams.shadow2()<\/code>:<\/p>\n<pre><code class=\"kotlin\">fun shadow2(): CustomShadowParams {     return CustomShadowParams(         name = \"Shadow 2\",         listOf(             Shadow(                 dX = 0.toPx,                 dY = 2.toPx,                 radius = 9.toPx,                 color = Color.BLACK,                 colorAlpha = 0.14f             )         )     ) }<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043d\u0435\u0439 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u044b \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438. \u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\">https:\/\/github.com\/ussernamenikita\/AndroidShadows<\/a>.<\/p>\n<h2>\u041e\u0431\u0437\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0432\u0430\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0431\u044f \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043f\u0438\u0441\u0435\u0446 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0418 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u044b \u0438\u0434\u0451\u043c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u043e\u0440\u0430\u0442\u043d\u0438\u043a\u0443 Android SDK:<\/p>\n<h3>Outline + elevation<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 SDK, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <code>elevation<\/code>\u00a0\u0438 <code>Outline<\/code>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0442\u0435\u043d\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0444\u043e\u0440\u043c\u043e\u0439 \u0442\u0435\u043d\u0438 \u0438 \u0435\u0451 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"kotlin\">val view = View(context) val layer = CustomShadowParams.shadow2().layers[0] view.outlineProvider = object : ViewOutlineProvider() {     override fun getOutline(view: View, outline: Outline) {         outline.setRoundRect(             layer.dX.toInt(),             layer.dY.toInt(),             layer.dX.toInt() + view.width,             layer.dY.toInt() + view.height,             buttonCornerRadius         )     } } view.elevation = layer.radius<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0442\u0435\u043d\u044c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u043d\u0438 \u0438\u0437 \u0441\u0435\u043c\u0438. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043b\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e SDK \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0426\u0432\u0435\u0442 \u0442\u0435\u043d\u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u043a\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0438 \u0446\u0432\u0435\u0442\u043e\u043c \u0442\u0435\u043d\u0438, \u043d\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f; \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>elevation<\/code>, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e. \u041d\u043e \u0442\u0435\u043d\u0438 \u043d\u0430\u0448\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0430\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0414\u043b\u044f API > 28 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b <code>outlineAmbientShadowColor<\/code> \u0438 <code>outlineSpotShadowColor<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 <code>Color.RED<\/code>, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0426\u0432\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0442\u0435\u043d\u0438 \u043d\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<h3>9-patch<\/h3>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f 9-patch. \u042f \u0438\u0441\u043a\u0440\u0435\u043d\u043d\u0435 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u044d\u0442\u0438\u043c \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043a\u043e\u0440\u043e\u0442\u0435\u043d\u044c\u043a\u043e \u043e\u0431\u0441\u0443\u0434\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u0415\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u0432 9-patch \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f \u0443\u0433\u043e\u0434\u043d\u043e \u0442\u0435\u043d\u044c \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0443\u0433\u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u043d\u0435\u0439. \u0418 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab\u043a\u0440\u0438\u0432\u043e\u0441\u0442\u044c\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c 9-patch \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u043d\u0435\u0439:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0438\u043d\u0438\u043c \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 <code>View<\/code>. \u0410 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0438 \u043a\u0440\u0430\u044f\u043c\u0438, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0439 <code>View<\/code>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u0435\u043d, \u0438 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f 9-patch.<\/p>\n<h3>MaterialShapeDrawable<\/h3>\n<p>\u0411\u043b\u0443\u0436\u0434\u0430\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/developer.android.com\/reference\/com\/google\/android\/material\/shape\/MaterialShapeDrawable\">MaterialShapeDrawable<\/a>. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u044b. \u041f\u043e \u0442\u0435\u043c\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u0443\u043c\u0435\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c:<\/p>\n<pre><code>val shadowDrawable = MaterialShapeDrawable(     ShapeAppearanceModel         .Builder()         .setAllCornerSizes(buttonCornerRadius)         .build() )  val view = View(context) val layer = CustomShadowParams.shadow2().layers[0] with(shadowDrawable) {     fillColor = ColorStateList.valueOf(buttonColor)     setShadowColor(layer.colorWithAlpha)     elevation = layer.radius     shadowCompatibilityMode = MaterialShapeDrawable.SHADOW_COMPAT_MODE_ALWAYS } view.background = shadowDrawable<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u0442\u0435\u043d\u044c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u043d\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0442\u0435\u043d\u0438, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0446\u0432\u0435\u0442. \u0422\u043e \u0435\u0441\u0442\u044c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043d\u0438 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0435\u043d\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u0439, \u0447\u0435\u043c <code>elevation<\/code> + <code>Outline<\/code>. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043d\u044c \u0432 MaterialShapeDrawable \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Bitmap<\/code>, \u0430 \u044d\u0442\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c.<\/p>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u0413\u043e\u0442\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u043d\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 <code>Drawable<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0446\u0432\u0435\u0442 \u0442\u0435\u043d\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>Bitmap<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h3>ScriptIntrinsicBlur<\/h3>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u0442\u0435\u043d\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0442\u0442\u0435\u043d\u043a\u0430 \u0441\u0435\u0440\u043e\u0433\u043e. \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0432 Android SDK \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/developer.android.com\/reference\/android\/renderscript\/ScriptIntrinsicBlur\">ScriptIntrinsicBlur<\/a><strong>. <\/strong>\u0422\u0443\u0442, \u043a\u0440\u043e\u043c\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e API, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0440\u044f\u0434\u043e\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u043a\u0440\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430 \u0432\u0441\u044e \u0441\u0432\u043e\u044e \u0436\u0438\u0437\u043d\u044c \u0438 \u043d\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0432 25 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u044f\u0432\u0438\u043c \u0441\u043c\u0435\u043a\u0430\u043b\u043a\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>radius\/25<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043c\u044b\u0432\u0430\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418 \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e <code>ScriptIntrinsicBlur<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <code>bitmap<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435.<\/p>\n<p>\u041a\u043e\u0434 \u044f \u0442\u0443\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432 \u043d\u0451\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c <code>Bitmap<\/code>, \u0440\u0438\u0441\u0443\u0435\u043c \u0432 \u043d\u0451\u043c \u043d\u0430\u0448\u0443 \u0444\u0438\u0433\u0443\u0440\u0443, \u0440\u0430\u0437\u043c\u044b\u0432\u0430\u0435\u043c \u0435\u0451 \u0438 \u0441\u0432\u0435\u0440\u0445\u0443 \u0440\u0438\u0441\u0443\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443 \u0431\u0435\u043b\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0441\u0451 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434, \u043e\u0441\u0442\u0430\u0432\u043b\u044e <a href=\"https:\/\/github.com\/ussernamenikita\/AndroidShadows\/blob\/master\/app\/src\/main\/java\/com\/example\/composeshadows\/ui\/view\/ScriptIntrinsicBlurShadowsView.kt\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a>.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0431\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u043d\u0438: \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0440\u0430\u0434\u0438\u0443\u0441, \u0446\u0432\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 <code>ScriptIntrinsicBlur<\/code> \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>bitmap<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u044d\u0442\u043e\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. \u041d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0442\u0431\u0438\u0432\u0430\u044e\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>SetShadowLayer<\/h3>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0432, \u0447\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e <code>ScriptIntrinsicBlur<\/code> \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u043f\u043e\u0438\u0441\u043a\u0438. \u0418 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Paint#setShadowLayer(float,%20float,%20float,%20int)\">setShadowLayer<\/a> \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Paint<\/code>. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u043e, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u043c \u00ab\u043d\u0435\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442\u00bb. \u041f\u0440\u0430\u0432\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u043a\u0441\u0442\u0430, \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e <a href=\"https:\/\/developer.android.com\/guide\/topics\/graphics\/hardware-accel.html#unsupported\">\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435<\/a>. \u0418 \u0435\u0441\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 <code>View<\/code>, \u0442\u043e \u0442\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c <code>Paint<\/code>. \u0422\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0434\u0435\u0432\u044f\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <code>Android<\/code>, \u0430 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041a\u043e\u0434 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043d\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0432 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 <code>Drawable<\/code>, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0430\u043c\u0443 <code>View<\/code>, \u0432\u0435\u0434\u044c \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <code>canvas<\/code>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c:<\/p>\n<pre><code class=\"kotlin\">private val shadowPaint = Paint(Paint.ANTI_ALIAS_FLAG) private val backgroundPaint = Paint(Paint.ANTI_ALIAS_FLAG)  override fun onDraw(canvas: Canvas) {     super.onDraw(canvas)     shadowParams.layers.forEach {         shadowPaint.setShadowLayer(it.radius, it.dX, it.dY, it.colorWithAlpha)         canvas.drawRoundRect(             0f,             0f,             width.toFloat(),             height.toFloat(),             roundRadius,             roundRadius,             shadowPaint         )     }     canvas.drawRoundRect(         0f,         0f,         width.toFloat(),         height.toFloat(),         roundRadius,         roundRadius,         backgroundPaint     ) }<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0435\u043d\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f Android &lt; 9 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <code>View<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0447\u0435\u043d\u044c \u0434\u043e\u0441\u0430\u0434\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Android, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f, \u0430 \u043a\u0430\u043a \u0441\u0430\u043c\u0430 \u041e\u0421 \u0440\u0438\u0441\u0443\u0435\u0442 \u0442\u0435\u043d\u044c? \u0420\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u043a\u0443\u0434\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 <code>Outline<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 <code>View<\/code>. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 <code>RenderNode<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">public boolean setOutline(@Nullable Outline outline) {     if (outline == null) {<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\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-329988","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/329988","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=329988"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/329988\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=329988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=329988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=329988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}