androidのview游戏框架
1. view游戏框架介绍,首先需要建立一个Activity。
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//隐去标题栏(应用程序的名字)
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//隐去状态栏部分(电池等图标和一切修饰部分)
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//设置显示View实例
setContentView(new MyView(this));
}
}
然后自定义一个视图类Myview继承View类。
public class MyView extends View {
private int textX = 20, textY = 20;
//重写父类构造函数
public MyView(Context context) {
super(context);
setFocusable(true);
}
//重写父类绘图函数
@Override
protected void onDraw(Canvas canvas) {
//创建一个画笔的实例
Paint paint = new Paint();
//设置画笔的颜色
paint.setColor(Color.WHITE);
//绘制文本
canvas.drawText("Game", textX, textY, paint);
super.onDraw(canvas);
}
//重写按键抬起事件函数
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取用户手指触屏的X坐标赋值与文本的X坐标
textX = (int)event.getX();
//获取用户手指触屏的Y坐标赋值与文本的Y坐标
textY = (int)event.getY();
//重绘画布
invalidate();
//postInvalidate();
return true;
}
}
加入log后,分析程序启动时候,view 中方法所走的流程。
先走构造方法,然后启动onDraw(). 一般会执行两次onDraw(),跟 onMeature(), onLayout()方法有关。
invalidate() 跟 postInvalidate() 区别:
invilidate() 方法不能在当前线程中循环调用执行,这里所说的线程不是系统的主UI线程,而是子线程,
postInvalidate() 可以子线程中循环调用执行,如果不在当前view创建线程循环重绘画布就没有区别了。