在开发中一个供取色的调色板的小调查,在同学的帮助下 android (android-sdk-windows\samples\android-8\ApiDemos\src\com\example\android\apis\graphics\ColorPickerDialog.java
)的源码 中得到点思路,可是最终还是不怎么明白那个取色 设色的过程。有点上高中 大学时数学三角函数的感觉。好多都忘了 呵呵。
重写了一个View,并且定义一个界面颜色变化的监听。在类中重写onTouchEvent方法,分别判断当抬起,放下,移动时的状态变化。获取颜色几行代码,看着简单,由于知道的少理解起来很不容易。
获取位置:
float angle = (float) java.lang.Math.atan2(y, x);//不在中心圆此范围时计算颜色,将将矩形坐标 (x, y) 转换成极坐标 (r, theta),返回所得角 theta// need to turn angle [-PI ... PI] into unit [0....1]float unit = angle / (2 * PI);if (unit < 0) {unit += 1;}mCenterPaint.setColor(interpColor(mColors, unit));//移动过程中心圆的变化

根据位置,解析这个点的颜色
private int ave(int s, int d, float p) {return s + java.lang.Math.round(p * (d - s));}private int interpColor(int colors[], float unit) {//中心圆取色,颜色解析if (unit <= 0) {return colors[0];}if (unit >= 1) {return colors[colors.length - 1];}float p = unit * (colors.length - 1);int i = (int) p;p -= i;// now p is just the fractional part [0...1) and i is the indexint c0 = colors[i];int c1 = colors[i + 1];int a = ave(Color.alpha(c0), Color.alpha(c1), p);int r = ave(Color.red(c0), Color.red(c1), p);int g = ave(Color.green(c0), Color.green(c1), p);int b = ave(Color.blue(c0), Color.blue(c1), p);return Color.argb(a, r, g, b);}

最后返回的颜色既是选择的颜色。这块不怎么明白。
下面是色彩环的颜色定义:
mColors = new int[] { 0xFFFF0000,0xFF00FF00,0xFF00FFFF, 0xFFFFFFFF, 0xFF00FFFF, 0xFF0000FF,0xFFFF00FF, 0xFFFF0000    }; 

更多相关文章

  1. android:绘图
  2. Android中shape的使用
  3. Android(安卓)5.x--使用Material Theme加Palette
  4. Android基础入门教程——8.1.1 Android中的13种Drawable小结 Par
  5. 最新!!Android(安卓)状态栏详细开发,5分钟精通状态栏
  6. android 使用contentobserver监听数据库内容变化
  7. Android基础入门教程——8.1.1 Android中的13种Drawable小结 Par
  8. android 遗忘很久的android 渐变色
  9. android Shape Drawable创建两边半圆的按钮背景

随机推荐

  1. thinkphp整合系列之tcpdf类生成pdf文件
  2. php中global的作用
  3. 要求PIN使用Symfony2登录
  4. PHP中是否存在“clamp”数字函数?
  5. php评论回复无限极嵌套如何实现?已写基本
  6. 短期项目求PHP开发人员或开发团队(2-3名),并
  7. 如何将JSON传回PHP的AJAX请求?
  8. PHP限制HTML内容中图片必须是本站的方法
  9. php网站 手机归属地查询接口
  10. PHP日期添加1年到当前日期。