{"id":254521,"date":"2015-04-04T23:53:02","date_gmt":"2015-04-04T19:53:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=254521"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=254521","title":{"rendered":"\u041d\u0430 \u0432\u043a\u0443\u0441 \u0438 \u0446\u0432\u0435\u0442 2 \u2013 \u043d\u0435 RGB \u0435\u0434\u0438\u043d\u044b\u043c"},"content":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u0432\u0441\u0435\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0437\u0430\u0442\u0435\u044e, \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/254797\/#first_unread\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e View \u0441 \u0440\u0430\u0437\u043d\u043e\u0446\u0432\u0435\u0442\u043d\u044b\u043c \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u043e\u043c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0434\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0446\u0432\u0435\u0442. \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0431\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0430\u0440\u043a\u0435\u0440\u044b-\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. <a name=\"habracut\"><\/a>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u2013 \u0441\u0442\u0440\u0435\u043b\u043e\u043a. \u0414\u043b\u044f \u043d\u0438\u0445 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f Paint \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u042f \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0443 \u043a\u0443\u0447\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041d\u0430\u0448\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u044e\u0442 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"java\">\t\/\/ \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0435 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \tprotected static final int\t\tSET_COLOR\t= 0; \tprotected static final int\t\tSET_SATUR\t= 1; \tprotected static final int\t\tSET_ALPHA\t= 2; \t\/\/ \u0438 \u0444\u043b\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \t\/\/ (\u043a\u0430\u043a-\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u044f \u0432\u044b\u0440\u0430\u0437\u0438\u043b\u0441\u044f) \tprivate int\t\t\t\tmMode;  \tfloat\t\t\t\t\t\tcx; \tfloat\t\t\t\t\t\tcy; \tfloat\t\t\t\t\t\trad_1; \/\/  \tfloat\t\t\t\t\t\trad_2; \/\/ \tfloat\t\t\t\t\t\trad_3; \/\/ \tfloat\t\t\t\t\t\tr_centr; \/\/ \u0440\u0430\u0434\u0438\u0443\u0441\u044b \u043d\u0430\u0448\u0438\u0445 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0435\u0439  \tfloat\t\t\t\t\t\tr_sel_c; \/\/  \tfloat\t\t\t\t\t\tr_sel_s; \/\/ \tfloat\t\t\t\t\t\tr_sel_a; \/\/ \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u0430  \t\t\/\/ \u0432\u0441\u044f\u043a\u0438\u0435 \u043a\u0440\u0430\u0441\u043a\u0438 \tprivate Paint\t\t\t\tp_color = new Paint(Paint.ANTI_ALIAS_FLAG); \tprivate Paint\t\t\t\tp_satur = new Paint(Paint.ANTI_ALIAS_FLAG); \tprivate Paint\t\t\t\tp_alpha = new Paint(Paint.ANTI_ALIAS_FLAG); \tprivate Paint\t\t\t\tp_white = new Paint(Paint.ANTI_ALIAS_FLAG); \tprivate Paint\t\t\t\tp_handl = new Paint(Paint.ANTI_ALIAS_FLAG); \tprivate Paint\t\t\t\tp_centr = new Paint(Paint.ANTI_ALIAS_FLAG);  \tprivate float\t\t\t\tdeg_col; \/\/ \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \tprivate float\t\t\t\tdeg_sat; \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 - \u0441\u0442\u0440\u0435\u043b\u043e\u043a \tprivate float\t\t\t\tdeg_alp; \/\/ ********************  \tprivate float\t\t\t\tlc; \/\/ \tprivate float\t\t\t\tlm; \/\/ \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u044b \u043b\u0438\u043d\u0438\u0439 \tprivate float\t\t\t\tlw; \/\/   private void calcSizes() { \t\/\/  \t\/\/  \t\tcx = size * 0.5f; \t\tcy = cx; \t\tlm = size * 0.043f; \t\tlw = size * 0.035f; \t\trad_1 = size * 0.44f; \t\tr_sel_c = size * 0.39f; \t\trad_2 = size * 0.34f; \t\tr_sel_s = size * 0.29f; \t\trad_3 = size * 0.24f; \t\tr_sel_a = size * 0.19f; \t\tr_centr = size * 0.18f;  \t\tlc = size * 0.08f; \t\tp_color.setStrokeWidth(lc); \t\tp_satur.setStrokeWidth(lc); \t\tp_alpha.setStrokeWidth(lc); \t} <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0446\u0432\u0435\u0442 \u043d\u0430 \u043d\u0430\u0440\u0443\u0436\u043d\u043e\u043c \u043a\u043e\u043b\u044c\u0446\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438 \u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 (\u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u044d\u0442\u043e a \u0438 b \u0432 ACTION_DOWN), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u2013 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0439. \u041f\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043a\u043e\u043d\u0430\u043c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u043e\u0431\u0437\u043e\u0432\u0435\u043c \u0435\u0435 \u00ab\u0441\u00bb. \u0418 \u0442\u0443\u0442 \u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c, \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0432 \u0442\u0440\u0443\u0434\u044b \u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u043d\u0430 \u041f\u0438\u0444\u0430\u0433\u043e\u0440\u0430:<\/p>\n<pre><code class=\"java\">float c = (float) Math.sqrt(a * a + b * b); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u0440\u0443\u0436\u043d\u043e\u043c \u043a\u043e\u043b\u044c\u0446\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0441 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043a\u043e\u043b\u044c\u0446\u0430. \u0417\u0430\u043e\u0434\u043d\u043e, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0435\u0449\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043b\u0435\u0446. \u0418 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433\u0438. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435:<\/p>\n<pre><code class=\"java\">\t\tcase MotionEvent.ACTION_DOWN: \t\t\tfloat a = Math.abs(event.getX() - cx); \t\t\tfloat b = Math.abs(event.getY() - cy); \t\t\tfloat c = (float) Math.sqrt(a * a + b * b); \t\t\tif (c &gt; r_sel_c) mode = SET_COLOR; \t\t\telse if (c &lt; r_sel_c && c &gt; r_sel_s) mode = SET_SATUR; \t\t\telse if (c &lt; r_sel_s && c &gt; r_sel_a) mode = SET_ALPHA; \t\t\telse if (c &lt; r_centr) listener.onDismiss(mColor, alpha); \t\t\tbreak; <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435 \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 ACTION_DOWN. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u043a\u043d\u0443\u0432 \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u0432 \u043d\u0430\u0440\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u044c\u0446\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0435\u043b\u043e\u0437\u0438\u0442\u044c \u043f\u043e \u043d\u0430\u0448\u0435\u0439 View \u0434\u0430\u0436\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0437\u043e\u043d\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u0430, \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0446\u0432\u0435\u0442. \u041f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0442\u043a\u043d\u0435\u043c \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438 \u043d\u0435 \u0441\u043c\u0435\u043d\u0438\u043c \u0444\u043b\u0430\u0433 mode.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 ACTION_MOVE \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u0442\u044c onTouch \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u041d\u0443 \u0438 \u0432\u044b\u0437\u043e\u0432 invalidate() \u044f \u0434\u0443\u043c\u0430\u044e \u043b\u0443\u0447\u0448\u0435 \u0441\u044e\u0434\u0430 \u0436\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c. \u0423 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"java\">\t\tcase MotionEvent.ACTION_MOVE: \t\t\tfloat x = event.getX() - cx; \t\t\tfloat y = event.getY() - cy; \t\t\tswitch (mMode) { \t\t\tcase SET_COLOR: \t\t\t\tsetColScale(getAngle(x, y)); \t\t\t\tbreak;  \t\t\tcase SET_SATUR: \t\t\t\tsetSatScale(getAngle(x, y)); \t\t\t\tbreak;  \t\t\tcase SET_ALPHA: \t\t\t\tsetAlphaScale(getAngle(x, y)); \t\t\t\tbreak; \t\t\t} \t\t\tinvalidate(); \t\t\tbreak; \t\t} <\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434\u044b \u0442\u0438\u043f\u0430 \u0434\u0432\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. getAngle(x, y) \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043b\u044c\u0446\u0430 \u0438 \u0446\u0435\u043d\u0442\u0440\u043e\u043c View. \u0427\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<pre><code class=\"java\">\tprotected float getAngle(float x, float y) { \t\tfloat deg = 0; \t\tif (x != 0) deg = y \/ x; \t\tdeg = (float) Math.toDegrees(Math.atan(deg)); \t\tif (x &lt; 0) deg += 180; \t\telse if (x &gt; 0 && y &lt; 0) deg += 360; \t\treturn deg; \t} <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0433\u043e\u043b \u0432 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u0446\u0432\u0435\u0442\u043e\u043c \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430. \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u044b\u0441\u043b\u044c \u0437\u0430\u0448\u043b\u0430 \u0432 \u0442\u0443\u043f\u0438\u043a. \u0418\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u0434\u0435\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u043e\u0432 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438\u0445 \u0446\u0432\u0435\u0442\u0430 \u044f \u043a\u0430\u043a-\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b. \u0412 \u0433\u043e\u043b\u043e\u0432\u0435 \u0432\u0435\u0440\u0442\u0435\u043b\u0438\u0441\u044c \u0441\u043b\u043e\u0432\u0430 \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0438\u0437 \u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440\u0430 \u2013 \u00ab\u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u0438, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b\u2026\u00bb. \u0412 \u0440\u043e\u043b\u0438 \u041a\u043e\u0432\u0430\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u043b \u0413\u0443\u0433\u043b. \u0418 \u0432\u043e\u0442 \u0447\u0442\u043e \u043e\u043d \u0441\u043a\u0430\u0437\u0430\u043b.<\/p>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0441\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u043d\u0435\u0442\u0430\u0445. \u0418 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e ARGB \u0442\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 HSV. \u0427\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0437\u0432\u0435\u0440\u044c \u0442\u0430\u043a\u043e\u0439? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u0430\u044f \u0435\u0433\u043e \u0431\u0443\u043a\u0432\u0430? \u0412\u0438\u043a\u0438 \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u00abHue \u2013 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0442\u043e\u043d\u2026 \u0412\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 0 \u2013 360\u2026\u00bb. \u041f\u0440\u0438\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435? \u0410 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b? S \u2013 Saturation \u2013 \u0434\u0430 \u044d\u0442\u043e \u0436\u0435 \u043d\u0430\u0448\u0435 \u0432\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u044c\u0446\u043e! \u0410 V \u2013 Value \u2013 \u044d\u0442\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c. \u0418 \u0410\u043d\u0434\u0440\u043e\u0438\u0434 \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u043c \u043f\u0430\u0440\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<pre><code class=\"java\">Color.HSVToColor(int, float[]); Color.colorToHSV(int, float[]); <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 int \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2013 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u043d\u0430\u0448\u0435 \u0442\u0440\u0435\u0442\u044c\u0435 \u043a\u043e\u043b\u044c\u0446\u043e. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 int \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0446\u0432\u0435\u0442. \u0418 \u0432 \u043e\u0431\u0435\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 float[] \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0442\u0440\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u0443\u043a\u0432\u0430\u043c HSV \u0438 \u0435\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u043e\u0442 0 \u0434\u043e 360. \u0416\u0438\u0437\u043d\u044c, \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u0430\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u044b argb \u0438 hsv \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"java\">\tprivate int[] argb = new int[] {\t255, 0, 0, 0};  \tprivate float[] hsv = new float[] {0, 1f, 1f}; <\/code><\/pre>\n<p>  \u0418 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u0443\u0433\u043e\u043b \u0432 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. <\/p>\n<pre><code class=\"java\">\t\tprotected void setColScale(float f) { \t\tdeg_col = f; \t\thsv[0] = f; \t\tmColor = Color.HSVToColor(argb[0], hsv); \t\tp_center.setColor(mColor); \t\t} <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0446\u0432\u0435\u0442, \u0443\u0433\u043e\u043b \u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u044c\u0446\u043e \u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0438. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">\tprivate void drawSaturGradient(Canvas c) {  \t\tSweepGradient s = null; \t\tint[] sg = new int[] { Color.HSVToColor(new float[] {deg_col, 1, 0}), Color.HSVToColor(new float[] {deg_col, 1, 1}), Color.HSVToColor(new float[] { hsv[0], 0, 1}), Color.HSVToColor(new float[] { hsv[0], 0, 0.5f}), Color.HSVToColor(new float[] {deg_col, 1, 0}) \t\t}; \t\ts = new SweepGradient(cx, cy, sg, null); \t\tp_satur.setShader(s); \t\tc.drawCircle(cx, cy, rad_2, p_satur);  \t} <\/code><\/pre>\n<p>  \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434, \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u0430, \u0442\u043e\u0442 \u0436\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043d\u0435\u043c 5 \u0446\u0432\u0435\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0432\u044b\u0434\u0438\u0440\u0430\u0435\u043c \u0438\u0437 HSV. \u041f\u0440\u0438\u0447\u0435\u043c \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0435\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0442 0 \u0434\u043e 1, \u0430 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439) \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u044f \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0437\u0430\u0441\u0443\u043d\u0443\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u0430. \u0411\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0430\u043c \u0438\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u0443 \u043d\u0430\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 hsv[0], \u043d\u043e \u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u044f \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e deg_col == hsv[0]. \u041d\u0443 \u0443\u0433\u043e\u043b \u043c\u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u0434 \u0440\u0443\u043a\u0443 \u043f\u043e\u043f\u0430\u043b\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/gelocod-ru.1gb.ru\/images\/sat.png\" alt=\"image\"\/><\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 onDraw(), \u043a\u0430\u043a \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435. \u0414\u0430\u0434\u0430, \u043c\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u0435 \u043a\u043e\u043b\u044c\u0446\u043e:<\/p>\n<pre><code class=\"java\">\tprivate void drawAlphaGradient(Canvas c) { \t\t\/\/ \u0442\u0440\u0438 \u0431\u0435\u043b\u044b\u0445 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u0447\u0435\u0440\u043d\u043e\u043c \u0444\u043e\u043d\u0435 \u043a\u0430\u043a \u0431\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \t\t\/\/ \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \t\tc.drawCircle(cx, cy, rad_3 - lw, p_white); \t\tc.drawCircle(cx, cy, rad_3, p_white); \t\tc.drawCircle(cx, cy, rad_3 + lw, p_white); \/\/ \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b RGB \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \t\tint ir = Color.red(mColor); \t\tint ig = Color.green(mColor); \t\tint ib = Color.blue(mColor); \t\t\/\/ \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u2013 \u043d\u0430\u0448 \u0438 \u043e\u043d \u0436\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \t\tint e = Color.argb(0, ir, ig, ib); \t\tint[] mCol = new int[] {mColor, e}; \t\t\/\/ \u042d\u0442\u043e \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \t\tShader sw = new SweepGradient(cx, cy, mCol, null); \t\tp_alpha.setShader(sw); \t\tc.drawCircle(cx, cy, rad_3, p_alpha); \t} <\/code><\/pre>\n<p>  \u0418 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438:<\/p>\n<pre><code class=\"java\">\tprivate void drawLines(Canvas c) { \t\tfloat d = deg_col; \t\tc.rotate(d, cx, cy); \t\tc.drawLine(cx + rad_1 + lm, cy, cx + rad_1 - lm, cy, p_handl); \t\tc.rotate(-d, cx, cy); \t\td = deg_sat; \t\tc.rotate(d, cx, cy); \t\tc.drawLine(cx + rad_2 + lm, cy, cx + rad_2 - lm, cy, p_handl); \t\tc.rotate(-d, cx, cy); \t\td = deg_alp; \t\tc.rotate(d, cx, cy); \t\tc.drawLine(cx + rad_3 + lm, cy, cx + rad_3 - lm, cy, p_handl); \t\tc.rotate(-d, cx, cy); \t} <\/code><\/pre>\n<p>  \u0423 \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441 \u2013 \u0437\u0430\u0447\u0435\u043c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f d? \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u043c\u043e\u0435\u0439 \u043f\u0430\u0440\u0430\u043d\u043e\u0439\u0438. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e deg_col \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435, \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u044e\u0437\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0432\u043e\u0434\u044f \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u043f\u043e \u044d\u043a\u0440\u0430\u043d\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u0447\u0442\u043e \u0437\u0430 \u0442\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u044b\u043c\u0438. \u041d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  <\/p>\n<pre><code class=\"java\">c.rotate(deg_col, cx, cy);  <\/code><\/pre>\n<p>  \u0438  <\/p>\n<pre><code class=\"java\">c.rotate(-deg_col, cx, cy); <\/code><\/pre>\n<p>  \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c Canvas \u043d\u0430 \u0440\u0430\u0437\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443. \u0418 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u044d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>  \u041d\u0443 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 Paint \u043f\u043e \u0432\u043a\u0443\u0441\u0443. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"java\">\tprivate void init(Context context) { \t\tsetFocusable(true);  \t\tp_color.setStyle(Style.STROKE); \t\tp_satur.setStyle(Style.STROKE); \t\tp_alpha.setStyle(Style.STROKE); \t\tp_center.setStyle(Style.FILL_AND_STROKE); \t\tp_white.setStrokeWidth(2); \t\tp_white.setColor(Color.WHITE); \t\tp_white.setStyle(Style.STROKE); \t\tp_handl.setStrokeWidth(5); \t\tp_handl.setColor(Color.WHITE); \t\tp_handl.setStrokeCap(Cap.ROUND); \t\t \t\tsetOnTouchListener(this); \t} <\/code><\/pre>\n<p>  setFocusable(true) \u044f \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0438\u043c OnTouch.<\/p>\n<pre><code class=\"java\">\tprotected void setSatScale(float f) { \t\tdeg_sat = f; \t\tif (f &lt; 90) { \t\t\thsv[1] = 1; \t\t\thsv[2] = f \/ 90; \t\t} \t\telse if (f &gt;= 90 && f &lt; 180) { \t\t\thsv[1] = 1 - (f - 90) \/ 90; \t\t\thsv[2] = 1; \t\t} \t\telse { \t\t\thsv[1] = 0; \t\t\thsv[2] = 1 - (f - 180) \/ 180; \t\t} \t\tmColor = Color.HSVToColor(argb[0], hsv); \t\tp_center.setColor(mColor); \t}\t   \tprotected void setAlphaScale(float f) { \t\tdeg_alp = f; \t\targb[0] = (int) (255 - f \/ 360 * 255); \t\tmColor = Color.HSVToColor(argb[0], hsv); \t\talpha = (float) Color.alpha(mColor) \/ 255; \t\tp_center.setColor(mColor); \t} <\/code><\/pre>\n<p>  \u041d\u0443 \u0447\u0442\u043e, \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422\u0443\u0442 \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430 \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043e\u043c\u0443-\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 Preference \u043f\u0438\u0441\u0430\u0442\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e Intent \u0441\u043b\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u043c\u0443 View \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u0430\u043a \u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0433\u043e \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u0446\u0435\u043d\u0442\u0440 \u043a\u0440\u0443\u0433\u0430, \u043c\u043e\u0436\u0435\u043c \u0432 \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c\u0435, \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0432 OnTouch. \u0413\u0443\u043b\u044f\u0442\u044c \u0442\u0430\u043a \u0433\u0443\u043b\u044f\u0442\u044c, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438 \u0442\u043e, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<pre><code class=\"java\">private OnColorChangeListener\tlistener;  \tpublic interface OnColorChangeListener { \t\tpublic void onDismiss(int val, float alpha); \t\tpublic void onColorChanged(int val, float alpha); \t}  \tpublic void setOnColorChangeListener(OnColorChangeListener l) { \t\tthis.listener = l; \t} <\/code><\/pre>\n<pre><code class=\"java\">\u0412 OnTouch:  \t\tcase MotionEvent.ACTION_DOWN: \t\t\t\u2026 \t\t\t\u2026 \t\t\telse if (c &lt; r_centr) { \t\t\t\tlistener.onDismiss(mColor, alpha); \t\t\t} \t\t\tbreak;  \t\tcase MotionEvent.ACTION_MOVE: \t\t\t\u2026 \u2026 \t\t\tlistener.onColorChanged(mColor, alpha); \t\t\tbreak; \t\t} \t\treturn true; \t} <\/code><\/pre>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u043b. \u0410, \u0434\u0430. \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448 ColorPicker \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c:<\/p>\n<pre><code class=\"java\">\tpublic void setUsedColor(int color, float a) { \t\tmColor = color; \t\tColor.colorToHSV(mColor, hsv); \t\tsetColScale(hsv[0]); \t\tfloat deg = 0; \t\tif (hsv[1] == 1) deg = 90 * hsv[2]; \t\telse if (hsv[2] == 1) deg = 180 - 90 * hsv[1]; \t\telse if (hsv[1] == 0) deg = 360 - 180 * hsv[2]; \t\tsetSatScale(deg); \t\tsetAlphaScale(360 - 360 * a); \t} <\/code><\/pre>\n<p>  P.S: \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c (\u0432 \u0432\u0438\u0434\u0435 ColorFilter) \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u0418\u043b\u0438 \u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b? \u0415\u0441\u043b\u0438 \u0434\u0430 \u2013 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u0435\u043d\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u044f\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0438. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 setAlpha, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c Color.alpha(mColor). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 int 0-255, \u0430 setAlpha(int) \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f deprecated. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f float \u043e\u0442 0 \u0434\u043e 1 (\u0442\u0438\u043f\u0430 setAlpha((float) Color.alpha(mColor) \/ 255));<\/p>\n<p>  \u0420\u0430\u0437 \u0443\u0436 \u043c\u044b \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u043c \u043d\u0430 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430, \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0433\u043e. \u0418 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 float 0-1. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443 \u0446\u0432\u0435\u0442\u0443 \u2013 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u044d\u0442\u043e \u0432 \u043a\u043e\u0434. <\/p>\n<p>  \u0425\u043e\u0442\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u2013 \u043c\u0430\u043b\u043e \u043b\u0438 \u0433\u0434\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u041d\u0435 \u0431\u0443\u0434\u0443 \u044d\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c, \u0434\u0443\u043c\u0430\u044e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0447\u0430\u0439\u043d\u0438\u043a\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435.     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/254895\/\"> http:\/\/habrahabr.ru\/post\/254895\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u0432\u0441\u0435\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0437\u0430\u0442\u0435\u044e, \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/254797\/#first_unread\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0443\u044e View \u0441 \u0440\u0430\u0437\u043d\u043e\u0446\u0432\u0435\u0442\u043d\u044b\u043c \u043a\u0440\u0443\u0436\u043e\u0447\u043a\u043e\u043c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0434\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0446\u0432\u0435\u0442. \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043e\u043a\u0443\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0431\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u043c \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0430\u0440\u043a\u0435\u0440\u044b-\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-254521","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/254521","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=254521"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/254521\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=254521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=254521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=254521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}