android - 如何让 Canvas 上的文字闪烁?

标签 android android-canvas android-bitmap

我在 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/

相关文章:

android - 在 Android 中无法处理 "javax/xml/XMLConstants.class"

android - 在 Android 中倾斜 TextView

java - 保存使用 onTouchEvent 绘制到位图上的图像

android - 为什么位图在android中显示黑色背景

java - 从 WebView 保存图像

Android PagedList 更新

android - 如何使用新的AndroidX Media2?

android - 显示图像占据屏幕的 80%

android - 在另一个 Android 上覆盖位图

android - 在Android中逐渐绘制路径