在开发中一个供取色的调色板的小调查,在同学的帮助下 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 获取View的位置参数:x,y和相对父容器的偏移量以及中心点
  2. Android Studio Gradle多渠道打包(动态设定App名称,应用图标,背景
  3. 设置listview中的item的颜色
  4. Android开发 - 丰富常用的颜色文件colors.xml
  5. android 颜色 获取
  6. Android:改变 Toolbar 的文字和溢出图标颜色

随机推荐

  1. Android版本更新(断点下载)
  2. 探究J2ME和Android的几大区别
  3. android微信朋友圈分享
  4. android进程重启及activity恢复
  5. Android Edittext设置android:imeOptions
  6. 性能优化——Android图片压缩与优化的几
  7. Android探索之旅 | 面向对象和Java基础
  8. Android4.0 input touch解析
  9. Android从服务端获取json解析显示在客户
  10. 几个应用开源项目