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); // 旋转控制的角度
canvas.drawBitmap(bmpEart, bmpEartX, bmpEartY, paint);// 绘制地图
canvas.restore();
}
} catch (Exception e) {
} finally {
if (canvas != null) {
sfh.unlockCanvasAndPost(canvas);
}
}
}