android游戏开发(三)触屏事件处理_手势识别
来源:互联网 发布:商行天下软件 编辑:程序博客网 时间:2024/05/21 17:22
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://mahaile.blog.51cto.com/2891586/831105
分析给定的动作事件,如果满足条件,就触发
GestureDetector.OnGestureListener
中提供的回调函数。设置是否允许长按。如果允许长按,当用户按下并保持按下状态时, 将收到一个长按事件,同时不再接收其它事件;如果禁用长按, 当用户按下并保持按下状态然后再移动手指时,将会接收到滚动事件。 长按默认为允许。
设置双击及其相关手势的监听器。
当轻触手势按下屏幕 时发生的事件.
快速滑动后抬起事件的通知.
长按时的通知事件
滑动屏幕时通知事件 为了方便提供了X轴和Y轴上的滚动距离.
当用户长点击后抬起时通知事件
当轻触手势抬起屏幕时发生的事件.
双击发生时的通知。
双击手势过程中发生的事件,包括按下、移动和抬起事件。
发生确定的单击时执行。
package yxqz.com;import android.content.Context;import android.content.DialogInterface;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.util.Log;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;import android.widget.Toast;/** * android 手势识别 * @author mahaile * */public class GameSurfaceView extends SurfaceView implements Callback,OnGestureListener{private String TAG="GameView";boolean flag; //线程标示位 当为false时停止刷新界面SurfaceHolder surfaceHolder;GameViewThread gameViewThread;float x=0,y=0;int stat=0; //手势识别状态标示private GestureDetector gd; // 手势Context context;int width,height;Bitmap bitmap_role;public GameSurfaceView(Context context) {super(context);this.context=context;surfaceHolder=this.getHolder();surfaceHolder.addCallback(this); //添加回调//设置焦点 如果不设置焦点的话 在该界面下 点击触摸屏是无效的 默认为falsesetFocusableInTouchMode(true);bitmap_role=BitmapFactory.decodeResource(getResources(), R.drawable.role);gd=new GestureDetector(this); //创建手势监听对象}public void onDraw(Canvas canvas){canvas.drawColor(Color.BLACK);//canvas.drawBitmap(bitmap_role, width/2-bitmap_role.getWidth()/2, y, null);canvas.drawBitmap(bitmap_role, x-bitmap_role.getWidth()/2, y-bitmap_role.getHeight()/2, null);} //重写父类中的 onTouchEvent就可以监听到 触摸事件了 记住要设置焦点喔 @Overridepublic boolean onTouchEvent(MotionEvent event) {gd.onTouchEvent(event); //通知手势识别方法 return true;}public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {}public void surfaceCreated(SurfaceHolder surfaceHolder) {//获取屏幕的 宽高 只有在 surface创建的时候 才有效 ,才构造方法中获取 宽高是获取不到的width=this.getWidth();height=this.getHeight();//初始化绘图线程gameViewThread=new GameViewThread();gameViewThread.flag=true;gameViewThread.start();}public void surfaceDestroyed(SurfaceHolder surfaceHolder) {gameViewThread.flag=false; //销毁线程}class GameViewThread extends Thread{public boolean flag;public void run(){while(flag){Canvas canvas=null;try{canvas=surfaceHolder.lockCanvas(); //锁定画布 并获取canvasonDraw(canvas);//调用onDraw 渲染到屏幕surfaceHolder.unlockCanvasAndPost(canvas); //此步不要忘记了喔 否则界面上显示不出来的}catch(Exception e){e.printStackTrace();}try {Thread.sleep(10);//线程休眠时间 控制帧数} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //每一秒刷新一次}}} //**************************下面是手势识别的重写方法*******************************************//屏幕点下public boolean onDown(MotionEvent arg0) {Log.d(TAG, "onDown");Toast.makeText(this.context, "你点击了屏幕", Toast.LENGTH_SHORT).show();return false;}//屏幕点下public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.d(TAG, "onFling");Toast.makeText(this.context, "你拖动屏幕后弹起", Toast.LENGTH_SHORT).show();return false;} //屏幕点下 并长按时触发public void onLongPress(MotionEvent e) {Log.d(TAG, "onLongPress");Toast.makeText(this.context, "你长按了屏幕", Toast.LENGTH_SHORT).show();} //屏幕拖动public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {this.x=this.x-distanceX;this.y=this.y-distanceY;Toast.makeText(this.context, "你拖动了屏幕", Toast.LENGTH_SHORT).show();return false;} //屏幕长按public void onShowPress(MotionEvent e) {// TODO Auto-generated method stubToast.makeText(this.context, "你长按屏幕后弹起", Toast.LENGTH_SHORT).show();Log.d(TAG, "onShowPress");} //屏幕点击后弹起public boolean onSingleTapUp(MotionEvent e) { Log.d(TAG, "onSingleTapUp"); Toast.makeText(this.context, "你弹起屏幕", Toast.LENGTH_SHORT).show();return false;}}
0 0
- android游戏开发(三)触屏事件处理_手势识别
- android游戏开发(三)触屏事件处理_手势识别
- Android 触屏事件处理_手势识别 鼠标事件
- android开发_MotionEvent与其他事件处理_手势_键盘_鼠标
- 【iOS开发】事件处理之手势识别(一)
- Android事件处理之多点触摸与手势识别
- Android事件处理之多点触摸与手势识别
- Android事件处理之多点触摸与手势识别
- Android事件处理之多点触摸与手势识别
- android游戏开发(二)触屏事件处理
- Android游戏开发之旅 View中手势识别
- IOS开发—事件处理,触摸事件,UITouch,UIEvent,响应者链条,手势识别
- Android开发之手势识别
- Android开发之手势识别
- Android开发之手势识别
- android开发之手势识别
- Android移动开发-手势事件处理MotionEvent的实现
- android手势操作事件处理
- 从零开始开发Android版2048 (二)获取手势信息
- c/c++/asm 混合编程
- 第五届蓝桥杯初赛-李白打酒
- linux下创建和删除软、硬链接
- 使用 Addr2line 将函数地址解析为函数名
- android游戏开发(三)触屏事件处理_手势识别
- 嵌入式 在uboot中添加硬件看门狗小示例
- hdu1232 畅通工程(并查集)
- 预先队列
- org.apache.commons.codec.binary.Base64图片加密解密
- 彻底解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- ajax图片上传,图片异步上传,更新
- 微博平台的链路追踪及服务质量保障系统——Watchman系统
- Algorithm学习笔记 --- Counterfeit Dollar