如何使Canvas上的文字闪烁?

时间:2014-10-31 12:25:35

标签: 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;
}

2 个答案:

答案 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();
}

你可以使用线程进行闪烁