我已在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;
}
答案 0 :(得分:1)
如果你的update()方法是从一个单独的线程中反复调用的,那么你不会看到任何变化是有意义的,因为你不仅没有使视图无效,而且还可以交换可见性太快说不出来了。
首先,让我们声明一个闪烁持续时间和我们上次更新时间的持有者: private static final int BLINK_DURATION = 350; // 350毫秒 private long lastUpdateTime = 0; private long blinkStart = 0;
现在,假设您正在设置将位图设置为视图的src或背景(如果您在其上面设置动画,则应该这样做),您应该能够绘制在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&# 39;孩子们。
现在我们已经设置了绘图方法,让我们将更新方法调整为仅在持续时间过后翻转,然后实际使视图无效:
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();
}
}
现在工作正常
答案 1 :(得分:1)
if(System.currentTimeMillis() - blinkStart >= 150 && blink) {
blink = false;
lastUpdateTime = System.currentTimeMillis();
}
你可以使用线程进行闪烁