gpt4 book ai didi

java - Android Canvas 从白色过渡到红色

转载 作者:行者123 更新时间:2023-12-01 17:57:11 26 4
gpt4 key购买 nike

我正在尝试将 Canvas 从白色转换为红色,但它似乎永远不会绘制到最后。所以你看不到过渡。我已经尝试了使用 Timer 和其他 Java 实用程序的一些选项,但是它们总是要求变量是最终的,这是不可能的。我相信使用线程 sleep 是最好的方法,但我没有得到所需的输出。

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。 Canvas 被绘制并调用 invalidate()Thread.sleep() 方法有 10 的轻微延迟。

我还没有找到一个很好的方法来在 android canvas 中完成这个任务,我认为这是我当前的实现。对于几秒钟的延迟,什么也没有,最后只有 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);
}
}

或者将ValueAnimator替换为ObjectAnimator

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

关于java - Android Canvas 从白色过渡到红色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com