创建一个 custom View
,实现它的onDraw()
方法并在那里做你的绘图。每次视图层次结构失效时,onDraw()
都会调用:
public class MyGameView extends View {
@Override
protected void onDraw(Canvas canvas) {
// Any tasks that should run every frame can be placed here. For
// example moving the player and monsters.
// Draw everything to canvas here.
canvas.drawBitmap(mPlayerBitmap, mPlayerX, mPlayerY, null);
canvas.drawBitmap(mMonsterBitmap, mMonsterX, mMonsterY, null);
// Either do a invalidate() to draw in maximum frame rate here. Or do
// postInvalidateDelayed(10) to draw a new frame every 0.1 seconds.
// onDraw() will automatically be called by the system.
postInvalidateDelayed(10);
}
}
然后可以将您的新视图添加到现有视图层次结构中,其中包含Button
s 和TextView
s 等其他内容,使用ViewGroup.addView(myGameView)
. 或者可以将其设置为内容视图以占据整个屏幕,使用Activity.setContentView(myGameView)
.
可以通过发布重复发生的任务,View.postDelayed()
以确保它们与onDraw()
. ARunnable
可以发布,然后每次run()
调用它的方法时再次发布自己。最好在 中发布任务Activity.onResume()
并将其删除Activity.onPause()
,以确保当您的游戏在后台时不会运行任何内容:
@Override
protected void onResume() {
super.onResume();
mMyGameView.postDelayed(mRunnable, 5000);
}
@Override
protected void onPause() {
super.onPause();
mMyGameView.removeCallbacks(mRunnable);
}
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
// Perform reoccurring task...
mMyGameView.postDelayed(mRunnable, 5000);
}
};