2

我让我的班级实现了 Drawable。我需要定期重绘它以获得一些“眨眼”效果。我正在使用 timer.schedule 来安排 invalidateSelf() 但什么也没发生。

private class DrawableImpl extends Drawable {
    private boolean blinkFlag = false;
    private Timer timer = new Timer(false);

    private int maxFlashCount = 21;
    private int intervalBetweenFlashesInMs = 100;
    private int currentFlashNumber = 0;

    @Override
    public void draw(Canvas canvas) {
        Log.i(TAG, "draw");

        /*draw stable part*/

        if (blinkFlag ) {
            Log.i(TAG, "blink");
            /*draw bliking part*/
        }

        blinkFlag = !blinkFlag;

        final DrawableImpl drawableImpl = this; 
        if (currentFlashNumber < maxFlashCount) {
            Log.i(TAG, "schedule");
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.i(TAG, "run from back");
                            drawableImpl.invalidateSelf();
                        }
                    });
                }
            }, intervalBetweenFlashesInMs);
            currentFlashNumber++;
        }
    }
}

在日志中类似这样的
内容 02-08 23:07:44.791: INFO/(258): draw
02-08 23:07:44.791: INFO/(258): blink
02-08 23:07:44.791: INFO/(258 ): 时间表
02-08 23:07:45.011: INFO/(258): 从后面跑
02-08 23:07:45.021: INFO/(258): 平局
02-08 23:07:45.021: INFO/(258 ): 时间表
02-08 23:07:45.171: INFO/(258): 从后面跑
02-08 23:07:45.171: INFO/(258): 平局
02-08 23:07:45.171: INFO/(258 ): 闪烁
02-08 23:07:45.171: INFO/(258): 计划
02-08 23:07:45.331: INFO/(258): 从后面跑

为什么它不起作用?我应该为此使用其他方法吗?

4

1 回答 1

2

我相信开发人员文档拥有答案。

使用当前的 Drawable.Callback 实现来重绘这个 Drawable。如果 Drawable 没有附加回调,则不执行任何操作。

于 2011-02-09T00:57:28.203 回答