Canvas 在简单的 Android 游戏中导致 UI 延迟
Canvas causes UI lag in simple Android game
我正在构建一个不需要帧速率的简单 Android 游戏。把它想象成一个简单的国际象棋游戏。
我创建了一个自定义视图,我在其中使用 onDraw() 绘制了整个游戏:
public class GameView extends View {
public GameView (Context context, AttributeSet attrs) {
super(context, attrs);
...
}
protected void onDraw(Canvas canvas) {
...
}
}
目前处于原型制作阶段,我只画线、圆和矩形,但不画任何位图。
每次玩家使用 invalidate()
移动时我都会绘制(每次玩家移动仅 1 帧)。
问题是,当已经绘制视图时,我注意到用户界面中的帧速率下降,例如,当我向用户显示对话框或敬酒时。它发生在视图已经绘制时,而不是我正在绘制的那一刻。
这很奇怪,不是吗?由于已经绘制了视图,为什么我会在用户界面中注意到这种延迟?
我认为你应该看看 SurfaceView,这可能正是你要找的。
视图全部绘制在同一个 GUI 线程上,该线程也用于所有用户交互。
因此您应该使用 SurfaceView,它专门用于在 canvas 上实际绘制的线程。
我也推荐Difference between SurfaceView and View?
我正在构建一个不需要帧速率的简单 Android 游戏。把它想象成一个简单的国际象棋游戏。
我创建了一个自定义视图,我在其中使用 onDraw() 绘制了整个游戏:
public class GameView extends View {
public GameView (Context context, AttributeSet attrs) {
super(context, attrs);
...
}
protected void onDraw(Canvas canvas) {
...
}
}
目前处于原型制作阶段,我只画线、圆和矩形,但不画任何位图。
每次玩家使用 invalidate()
移动时我都会绘制(每次玩家移动仅 1 帧)。
问题是,当已经绘制视图时,我注意到用户界面中的帧速率下降,例如,当我向用户显示对话框或敬酒时。它发生在视图已经绘制时,而不是我正在绘制的那一刻。
这很奇怪,不是吗?由于已经绘制了视图,为什么我会在用户界面中注意到这种延迟?
我认为你应该看看 SurfaceView,这可能正是你要找的。
视图全部绘制在同一个 GUI 线程上,该线程也用于所有用户交互。
因此您应该使用 SurfaceView,它专门用于在 canvas 上实际绘制的线程。
我也推荐Difference between SurfaceView and View?