您的位置:首页 > 其它

颜色渐变、#16进制转RGB颜色(转Int)

2016-07-07 18:43 471 查看
A: 初始颜色 B: 目标颜色

获取10个 A到B渐变的颜色值依次展示实现颜色渐变效果

思路:通过16进制字符串,对应拆分为RGB色值

举例:“#FB5D22” R: FB; G:5D; B:22;

获取到AB的RGB16进制色值后分别转换为10进制,同比例加减数值,实现颜色变化效果。

private void getColor() {
// Color.rgb(210, 233, 251);
// 方式一
colors = 0xD2E9FB;
//一个RGB分别为8位,获取R的色值右移16位
a[0] = colors >> 16;
//获取G的色值右移8位,取低8位,
a[1] = (colors >> 8) & 0xff;
//取低8位
a[2] = colors & 0xff;
// 方式二
b = RGBString2Int("1d3652");
byABGetStep();
}


16进制字符串转10进制

/**
* 将指定字符串src,以每两个字符分割转换为16进制形式
*
*/
public static int[] RGBString2Int(String src) {
int[] ret = new int[4];
for (int i = 0; i < 5; i += 2) {
ret[i / 2] = Integer.parseInt(src.substring(i, i + 2), 16);
}
return ret;
}


设置每次加减步长

private void byABGetStep() {
for (int i = 0; i < 3; i++) {
int step = Math.abs((a[i] - b[i]));
c[i] = step / COLOR_SUM;
if (step % COLOR_SUM > (COLOR_SUM / 2)) {
c[i]++;
}
}
}


现在:

private int[] c = new int[3];// 步长值

private int[] a = new int[3];// 初始值

private int[] b = new int[3];// 目标值

private int[] d = new int[3];// 当前值

通过循环设置d的值,在屏幕上绘制出来即可

/**
* 绘制画面
*/
public void myDraw() {
try {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.rgb(d[0], d[1], d[2]));// 刷新屏幕,用背景色刷新
canvas.save(); // 注意canvas.save()与canvas,restore()是成对存在的
canvas.rotate(oneEartRatOut, ratX, ratY); // 旋转控制的角度

4000
canvas.drawBitmap(bmpEart, bmpEartX, bmpEartY, paint);// 绘制地图
canvas.restore();
}
} catch (Exception e) {

} finally {
if (canvas != null) {
sfh.unlockCanvasAndPost(canvas);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: