gpt4 book ai didi

android - Android SurfaceView(canvas)如何控制重绘

转载 作者:行者123 更新时间:2023-11-29 21:40:50 31 4
gpt4 key购买 nike

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com