2015-03-25 3 views
0

У меня есть цифры от 1 до 100. И каждый номер должен изменить цвет представления.Цвет на основе уровня на Android

Что следует использовать? Я думаю об использовании холста, но мой образ, как это:

enter image description here

Если я использую холст, я должен знать алгоритм RGB для этого изображения, не я? Он становится зеленым до красного.

Я пробовал эту тему, что мне делать? Что вы порекомендуете?

My Canvas class is;

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); 



} 

ответ

0

Если я использую холст, я должен знать алгоритм 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 yo enter code here u имеет e nd. Чтобы получить цвет на каждом шагу:

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

или просто использовать ArgbEvaluator – pskink

+1

@pskink, спасибо, я никогда не слышал .. Я быстро посмотрел его, и он доступен из апи 11 – Blackbelt

+0

о заходи, не будьте пещерный человек, который использует api 11? Фред Флинстон и его семья? :-) – pskink