1

我在网格中有几张图像。看起来像这样:[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());

问题是表面视图的画布是随机重绘的。我想这样做,这样我就可以决定何时重绘画布以及重绘多少次。如何从主要活动中调用 onDraw 函数?我不知道该怎么做。

我知道线程已经完成

mySurface.onDraw(c);

4

1 回答 1

2

每次屏幕刷新都会调用 onDraw。屏幕刷新率取决于您的设备。如果刷新率为 70,那么您的 onDraw 每秒调用 70 次。onDraw 在单独的线程上运行,因此我不建议通过尝试从您的 UI 线程调用它来搞乱它。计算增量时间,即自上次调用 onDraw 以来经过的时间。假设您想以每秒 50 像素的速度为位图设置动画,然后说 x += deltaTime * 50;

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

如果你只是说 x += 1;

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

于 2013-06-17T15:17:01.067 回答