Android帆布从白色变为红色



我试图将画布从白色转变为红色,但是直到最后才绘制。因此,您看不到过渡。我尝试使用一些计时器和其他Java实用程序尝试了一些选项,但是它们总是要求变量是最终的,这是不可能的。我相信使用线程睡眠是最好的方法,但是我没有获得所需的输出。

for(int i=0; i < 255; i++){
    try {
        Thread.sleep(10);
        paint.setARGB(255,i,0,0);
        canvas.drawPaint(paint);
        invalidate();
    } catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
    }
}

您可以看到,for循环将循环通过0-255,并相应地设置油漆的argb。画布得到涂漆,并称为invalidate()。对于Thread.sleep()方法,有10个延迟。

我还没有找到在Android帆布中完成此操作的好方法,我认为这是我目前的实施。在几秒钟内,延迟一无所有,然后在末尾只是argb(255,255,0,0)的最终颜色。何时应显示argb(255,0,0,0) -argb(255,255,0,0)的每种颜色。

使用 ValueAnimator,如下

class CustomView extends AnyView {
  ...
  public void setBackgroundColor(int color){
    paint.setColor(color);
    invalidate();
  }
  public void animateColorChange(int startColor, int endColor) {
   ValueAnimator anim = ValueAnimator.ofInt(startColor, endColor); 
    anim.setEvaluator(new ArgbEvaluator());
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            final int newColor = (int) animator.getAnimatedValue();
            setBackgroundColor(newColor);
        } });
    anim.start();
  }
 public void onDraw(Canvas canvas) {
    canvas.drawPaint(paint);
  }
}

或用 ObjectAnimator

替换ValueAnimator
ObjectAnimator anim = ObjectAnimator.ofObject(paint, "color", new ArgbEvaluator(), startColor, endColor);
anim.setDuration(1500);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  @Override
  public void onAnimationUpdate(ValueAnimator animation) {
    invalidate();
  }
});
anim.start();

最新更新