【问题标题】:Level based view color in AndroidAndroid中基于级别的视图颜色
【发布时间】:2015-03-25 08:55:19
【问题描述】:

我有 1 - 100 之间的数字。每个数字都必须改变视图的颜色。

我应该使用什么?我想用画布,但我的图像是这样的:

如果我使用画布,我必须知道这张图片的 RGB 算法,不是吗?它从绿色变为红色。

我一直卡在这个话题上,我该怎么办?你有什么推荐的?

我的 Canvas 类是;

public class CircleCanvasView extends View {

Paint paint;
Path path;
int level = 0;

public CircleCanvasView(Context context, int level) {
    super(context);
    init();
    this.level = level;
}

public CircleCanvasView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public CircleCanvasView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

private void init() {
    paint = new Paint();
    paint.setColor(Color.BLUE);
    paint.setStrokeWidth(10);
    paint.setStyle(Paint.Style.STROKE);

}

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);

    paint.setStyle(Paint.Style.STROKE);
    canvas.drawCircle(50, 50, 30, paint);



}

【问题讨论】:

    标签: android canvas drawable


    【解决方案1】:

    如果我使用画布,我必须知道这张图片的 RGB 算法,不是吗? 它从绿色变为红色。

    不是真的。您需要的是颜色的插值器。并且您想以 100 步更改其间的颜色。你有你的 startColor 和你的 endColor,两个 int 值。通过颜色类可以得到它们的单个组件:

    int alpha = Color.alpha(startColor);
    int red = Color.red(startColor);
    int blue = Color.blue(startColor);
    int green = Color.green(startColor); 
    

    int endalpha = Color.alpha(endColor);
    int endred = Color.red(endColor);
    int endblue = Color.blue(endColor);
    int endgreen = Color.green(endColor);  
    

    你想要类似的东西

       int cAlpha = alpha + factor * (endAlpha - alpha);
       int cRed = red + factor * (endAlpha - red);
       int cBlue = blue + factor * (endAlpha - blue);
       int cGreen = green + factor * (endAlpha - green);
    

    0 <= factor <= 1

    当因子为 0 时,您有起始组件,当因子为 1 时,yoenter code hereu 有结束组件。在每一步获取颜色:

     int colorAtStep = Color.argb(cAlpha, cRed, cBlue, cGreen); 
    

    【讨论】:

    • 或者只使用 ArgbEvaluator
    • @pskink,谢谢,我从没听说过.. 我很快查了一下,它可以从 api 11 获得
    • 哦,进来吧,别当穴居人,谁用api 11?弗雷德弗林斯顿和他的家人? :-)
    • @pskink 我们仍然保持与姜饼的向后兼容性。它仍然是市场上 9% 的设备
    • @pskink 我仍然支持 API 级别 8
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多