Android Canvas-如何在不更改先前绘制路径颜色的情况下更改路径颜色?我需要显示实时数据

时间:2019-01-18 20:45:50

标签: android android-canvas surfaceview android-color

我想知道,Android中有没有一种方法可以更改SurfaceView中Canvas上路径的颜色,而不更改以前绘制的路径的颜色?我知道以前曾问过这个问题,但是给出的解决方案对我不起作用,因为我正在绘制一个显示实时数据的路径,并且每次需要更改颜色时都必须创建一个新的Path对象,这并不是最好的选择性能。

基本上,我正在绘制一个显示人的体重的实时图表,我希望自己的道路根据体重逐渐改变颜色,从灰色,黄色,绿色,蓝色,紫色,红色,然后黑。每次需要更改颜色时,都无法创建新的Path对象,因为在显示实时数据时会经历许多不同的颜色,因此在我的方案中将无法使用。基本上,我不希望更改整个路径,而是希望更改路径上的特定点。

有人知道替代解决方案吗?

编辑:这是我生成颜色的代码:

 private final float[] PERCENT_COLORS = {0f, 0.2f, 0.4f, 0.6f, 0.8f, 1f, 1.2f};
 private final int[] COLOR_SCALE = {
        Color.rgb(200, 200, 200),
        Color.rgb(255, 255, 0),
        Color.rgb(102, 204, 51),
        Color.rgb(51, 81, 220),
        Color.rgb(171, 53, 133),
        Color.rgb(210, 39, 39),
        Color.rgb(0, 0, 0)};

public int generateColor(float percent) {
    if (percent >= 1.20) {
        return Color.rgb(0, 0, 0);
    } else if (percent < PERCENT_COLORS[0]) {
        return Color.rgb(100, 100, 100);
    }
    int i = 1;
    for (; i < PERCENT_COLORS.length - 1; i++) {
        if (percent < PERCENT_COLORS[i]) {
            break;
        }
    }

    float lower = PERCENT_COLORS[i - 1];
    float upper = PERCENT_COLORS[i];
    float range = upper - lower;
    float percentUpper = (percent - lower) / range;
    float percentLower = 1 - percentUpper;

    int red = (int) Math.floor(Color.red(COLOR_SCALE[i - 1]) * percentLower + Color.red(COLOR_SCALE[i]) * percentUpper);
    int green = (int) Math.floor(Color.green(COLOR_SCALE[i - 1]) * percentLower + Color.green(COLOR_SCALE[i]) * percentUpper);
    int blue = (int) Math.floor(Color.blue(COLOR_SCALE[i - 1]) * percentLower + Color.blue(COLOR_SCALE[i]) * percentUpper);

    return Color.rgb(red, green, blue);
}

基本上,我正在经历彩虹的彩虹。我需要在路径上使用此代码,而无需更改整个路径的颜色。

0 个答案:

没有答案