在开发中一个供取色的调色板的小调查,在同学的帮助下 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 index
int 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
};
分享到:
相关推荐
这篇练习题主要针对如何在Android应用中创建并使用自定义颜色资源进行讲解,旨在帮助开发者掌握Android颜色资源的使用技巧,实现一个简单的调色板功能。 首先,理解颜色在Android中的表示方式。Android支持多种颜色...
4. **主题与颜色**:Android L对主题和颜色进行了升级,引入了`Theme.Material`主题和颜色调色板。开发者可以在`res/values/styles.xml`文件中定义主题,利用新的颜色属性,如`colorPrimary`、`colorAccent`等,实现...
除了基本的绘图功能,PaintApp 还可能包含了颜色选择器和调色板功能。这些功能通常基于 Color 类,允许用户选取 RGB 或 HSL 颜色模型的颜色。同时,应用可能会提供预设的颜色集合,或者让用户自定义颜色。 在文件...
media工程演示了App开发用到的常见多媒体技术,包括自定义相册的实现(画廊、图像切换器、卡片视图、调色板)、影视播放器的实现(视频视图、媒体控制条、阶段实战项目——爱看剧场)、ContentProvider内容组件的...
调色板展示android.support.v7.graphics.Palette示例应用程序。 解决大位图等问题,并使用库进行系统栏着色。截屏执照 Copyright 2014 Zhang HaiLicensed under the Apache License, Version 2.0 (the "License");...