如何控制Android SurfaceView(画布)重绘

时间:2013-06-17 14:49:42

标签: android android-canvas surfaceview redraw

我在网格中有几张图片。 看起来像这样: [http://cdn.thenextweb.com/wp-content/blogs.dir/1/files/2013/06/jolla4.jpg] [1]

我没有使用Android Gridview,而是使用了画布,因为图标需要设置动画。我读到我需要使用画布进行游戏。

我使用SurfaceView(与线程结合)在屏幕上绘制图像。

 class MySurface extends SurfaceView implements SurfaceHolder.Callback {
@Override
    public void onDraw(Canvas canvas) {
        //here i create the bitmaps and draw the icons on the screen.

}
@Override
public void surfaceCreated(SurfaceHolder holder) {
    thread.setRunning(true);
    thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    thread.setRunning(false);
    while (retry) {
        try {
            thread.join();
            retry = false;
        } catch (InterruptedException e) {}
        }
    }

一切正常。使用代码在我的主要活动中调用Mysurface:

setContentView(new MySurface());

问题是surfaceview的画布是随机重绘的。我想做到这一点,我可以决定何时重绘画布和多少次。如何从主活动中调用onDraw函数?我不知道该怎么做。

我知道在线程中完成了

  

mySurface.onDraw(C);

1 个答案:

答案 0 :(得分:2)

每次刷新屏幕都会调用

onDraw。屏幕刷新率取决于您的设备。如果刷新率为70,则onDraw每秒调用70次。 onDraw是在一个单独的线程上运行所以我不建议通过尝试从你的UI线程调用它来搞乱它。计算增量时间,它是自上次调用onDraw以来经过的时间。我们假设您希望为每秒50像素的位图设置动画,然后说     x + = deltaTime * 50;

这将使您的位图每秒仅在x轴上移动50个像素。

如果你只是说    x + = 1;

您的位图将每秒移动屏幕刷新率时间。由于所有设备都具有不同的刷新率,因此您需要使用增量时间,以便在所有设备中以相同的速度更新屏幕。否则,您的动画速度会因设备而异。