我在 render()
方法上编写了这段代码。现在,我想让文字闪烁,但它不起作用
canvas.drawText(blinkText, 10, 10, paint);
if (blink == true) {
canvas.drawText(blinkText, 10, 10, paint);
} else {
canvas.drawText("Low Fuel", 10, 10, null);
}
以及在update()
方法中
if (blink == false) {
blink = true;
} else {
blink = false;
}
最佳答案
如果从单独的线程重复调用 update() 方法,则您看不到任何更改是有道理的,因为您不仅没有使 View 无效,而且还可能太快地交换可见性而无法分辨.
首先,让我们声明眨眼持续时间和上次更新时间的持有者: 私有(private)静态最终int BLINK_DURATION = 350;//350 毫秒 私有(private)长最后更新时间 = 0; 私有(private)长blinkStart=0;
现在,假设您将位图设置为 View 的 src 或背景(如果您在其上进行动画处理,则应该这样做),您应该能够在 View 上绘制文本在 View 的dispatchDraw(Canvas)调用之后在其Canvas上:
@Override
public void dispatchDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setTextSize(40);
paint.setColor(Color.RED);
canvas.drawBitmap(back, width / 2 - back.getWidth() / 2, height / 2
- back.getHeight() / 2, null);
if (blink)
canvas.drawText(blinkText, back.getWidth() / 2,
back.getHeight() / 2, paint);
}
注意:通常您会使用 onDraw(Canvas),但在这种情况下,View 可能是具有背景和子级的布局,在这种情况下,我们使用dispatchDraw(Canvas) 来确保我们实际上在所有 View 的子级之上进行绘制.
现在我们已经设置了绘制方法,让我们调整您的更新方法,使其仅在持续时间过去后翻转,然后实际使 View 无效:
public void update() {
if (System.currentTimeMillis() - lastUpdateTime >= BLINK_DURATION
&& !blink) {
blink = true;
blinkStart = System.currentTimeMillis();
}
if (System.currentTimeMillis() - blinkStart >= 150 && blink) {
blink = false;
lastUpdateTime = System.currentTimeMillis();
}
}
现在一切正常
关于android - 如何让 Canvas 上的文字闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674668/