?
?这两天花了点时间做了一个android 的 颜色选择器
?
大牛就不要笑了.
看了几篇文章...
其实好像都是转载的...找不到出处.
其中有一个是 "AS3调色板算法"
里面有介绍了原理.
我们经常看到这种样子的颜色选择器吧..
?
我这里就只是简单说一下.
1构建一张 七彩图:
?
然后其实右边的亮度选择是:
?
?
这样我们的代码就可以进行啦...
?
?
// 创建七彩图片
?private void init() {
??int[] oc = { 0xffff0000, 0xffffff00, 0xff00ff00, 0xff00ffff,
????0xff0000ff, 0xffff00ff, 0xffff0000 };
??float[] op = { 0, 0.16667f, 0.33333f, 0.5f, 0.66667f, 0.83333f, 1 };
??LinearGradient lg = new LinearGradient(0, 0, ORIWIDTH, 0, oc, op,
????TileMode.MIRROR);
??LinearGradient lg2 = new LinearGradient(0, 0, 0, ORIHEIGHT, 0x00808080,
????0xff808080, TileMode.MIRROR);
??oriColor = Bitmap.createBitmap(ORIWIDTH, ORIHEIGHT, Config.ARGB_8888);
??Canvas c = new Canvas(oriColor);
??paint.setShader(lg);
??c.drawRect(0, 0, ORIWIDTH, ORIHEIGHT, paint);
??paint.setShader(lg2);
??c.drawRect(0, 0, ORIWIDTH, ORIHEIGHT, paint);
?}
?
?
// 右边的亮度栏
?private void drawABar(Canvas c) {
??int x, y;
??x = (roundColor & 0x00ffffff);
??y = (x | 0xff000000);
??LinearGradient lg = new LinearGradient(0, 0, layoutWidth, 0, x, y,
????TileMode.MIRROR);
??// 初始化 x 240 + 6 * 2
??y = ORIHEIGHT + (GAP << 2) - GAP + BARHEIGHT;??
??paint.setColor(0xffffffff);??
??c.drawBitmap(aBk, 0, y, paint);
??paint.setShader(lg);
??c.drawRect(0, y, layoutWidth, y + BARHEIGHT, paint);
?}
?
?
其他屏幕事件什么的就不贴代码啦...
?
?