gpt4 book ai didi

java - 动画在 Canvas 上移动的线条

转载 作者:行者123 更新时间:2023-11-29 06:04:00 25 4
gpt4 key购买 nike

我制作了这个相当简单的 View 。它应该为在一段时间内(DURATION)从左到右行进的红线设置动画。它应该在每个 DELAY 更新它的位置,这样您就可以根据需要调整动画以使其更平滑。应该注意的是,我正在模拟器上对此进行测试。好吧,如果我增加 DELAY 则动画完成得更快,即使它对总动画时间应该没有影响。我只是动画太快了,占用了所有资源吗?还是我数学不好?

public class AnimView extends View {

// Animation duration in milliseconds
private static final int DURATION = 4000;

// Update frame every delay (in milliseconds)
private static final int DELAY = 10;

private int pos;
private long lastTick;
private Paint paint;

public AnimView(Context context, AttributeSet attrs) {
super(context, attrs);
pos = 0;
lastTick = 0;
paint = new Paint();
paint.setColor(Color.RED);
}

@Override
protected void onDraw(Canvas canvas) {

if(System.currentTimeMillis() - lastTick >= DELAY) {
// Calculate a new position for the line
pos += (int) (((double) DELAY / DURATION) * getWidth());

lastTick = System.currentTimeMillis();
}

canvas.drawRect(pos, 0, pos + 1, getHeight(), paint);

if(pos < getWidth()) {
// Position is still below getWidth, keep animating
postInvalidate();
}

}

}

最佳答案

您应该在 if 语句中更新 lastTick:

 long currentTime = System.currentTimeMillis();
if(currentTime - lastTick >= DELAY) {
// Calculate a new position for the line
pos += (int) (((double) DELAY / DURATION) * getWidth());
lastTick = currentTime;
}

否则每次DELAY过后你都会绘制。因此,当您增加 DELAY 时,绘图会减少,因此程序会更快地完成。

关于java - 动画在 Canvas 上移动的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149469/

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