Android游戏开发之单点触摸与多点触摸的响应方式
Android游戏开发之单点触摸与多点触摸的响应方式
游戏开发中的触摸事件 在游戏开发中监听屏幕触摸事件须要在View中重写父类onTouchEvent方法,在重写的方法中拦截用户触摸屏幕的一些信息,比如触摸屏幕的X 、 Y坐标 触摸屏幕发生的事件 触摸按下 触摸抬起 触摸移动,触摸屏幕发生的时间 等等, 我们先看看onTouchEvent的函数原型。函数中的Event 参数的意思为当前触摸事件的对象,这个对象中包含着当前触摸事件的一切信息。比如ecent.getAction()可以拿到当前触摸事件的名称,根据触摸事件的名称可以判断当前是触摸按下 还是 触摸移动 还是 触摸抬起。 event.getX()与 event.getY()可以拿到当前触摸屏幕的X Y坐标。event.getEventTime(); 可以拿到当前触发触摸事件的时间,等等所有的信息。
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- int action = event.getAction();
- mPosX = (int) event.getX();
- mPosY = (int) event.getY();
- switch (action) {
- // 触摸按下的事件
- case MotionEvent.ACTION_DOWN:
- Log.v("test", "ACTION_DOWN");
- break;
- // 触摸移动的事件
- case MotionEvent.ACTION_MOVE:
- Log.v("test", "ACTION_MOVE");
- break;
- // 触摸抬起的事件
- case MotionEvent.ACTION_UP:
- Log.v("test", "ACTION_UP");
- break;
- }
- / return super.onTouchEvent(event);
- return true;
- }
1.单点触摸
在下面这个DEMO中 用手触摸 移动 屏幕后 下面的icon图片会跟随这我的手势移动。 代码实现主要是在onTouchEvent方法中时时去计算手触摸屏幕各个状态的坐标 然后调用 postInvalidate(); 方法去通知UI刷新屏幕重新显示图片 文字的位置以及内容。 具体相关内容见Android游戏开发之构建游戏框架View与SurFaceView的区别
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.MotionEvent;
- import android.view.View;
- public class ViewActivity extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new MyView(this));
- }
- public class MyView extends View {
- /** 触摸后绘制的图片 **/
- Bitmap mBitmap = null;
- /** 游戏画笔 **/
- Paint mPaint = null;
- /** 触摸后在屏幕中显示的位置 **/
- int mPosX = 0;
- int mPosY = 0;
- /**事件触发时间**/
- Long mActionTime = 0L;
- public MyView(Context context) {
- super(context);
- /** 设置当前View拥有控制焦点 **/
- this.setFocusable(true);
- /** 设置当前View拥有触摸事件 **/
- this.setFocusableInTouchMode(true);
- /** 加载图片 **/
- mBitmap = BitmapFactory.decodeResource(getResources(),
- R.drawable.item);
- mPaint = new Paint();
- mPaint.setColor(Color.WHITE);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- /** 绘制图片 **/
- canvas.drawBitmap(mBitmap, mPosX, mPosY, mPaint);
- canvas.drawText("当前X坐标:"+mPosX, 0, 20, mPaint);
- canvas.drawText("当前Y坐标:"+mPosY, 0, 40, mPaint);
- canvas.drawText("事件触发时间:"+mActionTime, 0, 60, mPaint);
- super.onDraw(canvas);
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- int action = event.getAction();
- mPosX = (int) event.getX();
- mPosY = (int) event.getY();
- switch (action) {
- // 触摸按下的事件
- case MotionEvent.ACTION_DOWN:
- Log.v("test", "ACTION_DOWN");
- break;
- // 触摸移动的事件
- case MotionEvent.ACTION_MOVE:
- Log.v("test", "ACTION_MOVE");
- break;
- // 触摸抬起的事件
- case MotionEvent.ACTION_UP:
- Log.v("test", "ACTION_UP");
- break;
- }
- /**得到事件触发时间**/
- mActionTime = event.getEventTime();
- /** 通知UI线程刷新屏幕 **/
- postInvalidate();
- // return super.onTouchEvent(event);
- return true;
- }
- }
- }
|
评论暂时关闭