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

标签 android android-canvas surfaceview redraw

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

相关文章:

java - 从表面 View 切换到主要 Activity 类

android - 用于交替行颜色的通用阵列适配器?

android - 在 Canvas 上绘制部分图像

java - 在 android 中用 Canvas 绘制四分之一仪表?

java - 用android Canvas 绘制的动画/闪光圆

android - 媒体播放器完成后如何清除表面支架?

android - 安装 Android Studio - 未安装 SDK 组件

Android NDK,来自预建静态库的 header

java - 如何从 Presenter 解析 JSON 并设置为 RecyclerView(Android)

android - MotionEvent 在仍在使用时被回收