我在网格中有几张图片。 看起来像这样: [http://cdn.thenextweb.com/wp-content/blogs.dir/1/files/2013/06/jolla4.jpg][1]
我没有使用 android Gridview,而是使用了 Canvas ,因为图标需要动画。我读到我需要使用 Canvas 来玩游戏。
我正在使用 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 是从我的主要 Activity 中使用代码调用的:
setContentView(new MySurface());
问题是 surfaceview 的 Canvas 是随机重绘的。我想这样做,这样我就可以决定何时重绘 Canvas 以及重绘多少次。如何从主要 Activity 中调用 onDraw 函数?我不知道该怎么做。
我知道在线程中完成了
mySurface.onDraw(c);
最佳答案
每次屏幕刷新时都会调用 onDraw。屏幕刷新率取决于您的设备。如果刷新率为 70,则每秒调用 onDraw 70 次。 onDraw 在单独的线程上运行,因此我不建议通过尝试从您的 UI 线程调用它来弄乱它。计算增量时间,即自上次调用 onDraw 以来耗时。假设您想以每秒 50 像素的速度为位图设置动画,然后说 x += 增量时间 * 50;
这将使您的位图每秒在 x 轴上仅移动 50 像素。
如果你只是说 x += 1;
您的位图将每秒移动屏幕刷新率次数。由于所有设备的刷新率各不相同,因此您需要使用增量时间,以便在所有设备中以相同的速度更新屏幕。否则您的动画速度会因设备而异。
关于android - Android SurfaceView(canvas)如何控制重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150478/