Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)
1.回顾
上篇学习了 Android 系统服务的 10个实例 ,当然 还有更多的系统服务没有使用;留下来的遗憾就是,昨晚没有将demo下载地址分享出去;
demo下载:
http://download.csdn.net/detail/lablenet/9062623
2.重点
(1)OnTouchListener 实现 上下左右手势识别
(2)OnTouchListener + SimpleOnGestureListener + GestureDetector 实现 上下左右 手势识别
(3)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 实现 自定义手势识别
3. 效果图
普通手势识别: 自定义手势识别:
4. 图片准备
为了实现的效果更好一点,使用 ps 做了 9张 图片 ,来作为响应 ,更直观 的显示;
(1)待机
(2)普通手势判断:上下左右
(3)自定义手势判断 :对号,错号,圆,雷
5. OnTouchListener 实现 上下左右手势识别
5.1 思路
(1) OnTouchListener 在前面使用过,在 做 图片轮播(ViewFlipper) 的时候使用过 ;
(2)基本思路一样,设置 OnTouchListener ,进行判断 ;
5.2 实现
给图片或者布局设置监听即可;
/** * * 第一种方式: * 添加触摸 事件监听器 * @author yuan * */class imgtestTouchListener implements OnTouchListener{private int x=0;private int y=0;@Overridepublic boolean onTouch(View v, MotionEvent event) {// 可以通过 x ,y 来判断 滑动的手势//不过只可以判断:上滑,下滑,左滑,右滑 switch (event.getAction()) { case MotionEvent.ACTION_DOWN://手指按下的时候:初始化 x,y 值x=(int) event.getX();y=(int) event.getY();break;case MotionEvent.ACTION_MOVE://移动就不说了,因为在这里判断手势,只和 按下的位置和 抬起来的位置 有关;break;case MotionEvent.ACTION_UP:/* * 手指抬起来触发 ,所以判断在这里进行 * 1.获得结束的x,y * 2.进行判断 */int upx=(int) event.getX();int upy=(int) event.getY();String result=drawTouch(upx,upy);//提醒textView1.setText(result);break;}return true;}private String drawTouch(int upx,int upy){String str="没有滑动";//水平滑动if(upx-x>100){str="向右滑动";//改变图片img_test.setImageResource(R.drawable.icon_right);}else if(x-upx>100){str="向左滑动";//改变图片img_test.setImageResource(R.drawable.icon_left);}else if(upy-y>100){str="向下滑动";//改变图片img_test.setImageResource(R.drawable.icon_down);}else if(y-upy>100){str="向上滑动";//改变图片img_test.setImageResource(R.drawable.icon_up);}return str;}}
6. OnTouchListener + SimpleOnGestureListener + GestureDetector 实现 上下左右 手势识别
6.1 思路
(1)和 使用 OnTouchListener 一样,不过是将 MotionEvent 对象交给 GestureDeteCtor 对象 处理
(2)GestureDetector 实现的不仅仅 实现 上下左右的判断,还有很多 这里仅仅 重新了 onFling() 方法
6.2 实现
(1)声明 并 实例化 GestureDetector
private GestureDetector gestureDetector;
(2)一定在 OnCreate 里实例化 ,不然报 空指针 异常
//00.初始化 GestureDetector 对象gestureDetector=new GestureDetector(MainActivity.this,new GestureDelectorSimlpeListener());
(3)实现 SimpleOnGestureListener 监听
/** * 2.继承 SimpleOnGestureListener * 重载 感兴趣的 手势 * @author yuan * */class GestureDelectorSimlpeListener extends SimpleOnGestureListener{@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {/* * 滑动 使用 onFling()方法 * 3.判断 */String result=drawTouch(e1.getX(),e1.getY(),e2.getX(),e2.getY());textView1.setText(result);return true;}/** * 手势判断 * @param x * @param y * @param upx * @param upy * @return */private String drawTouch(float x,float y,float upx,float upy){String str="没有滑动";//水平滑动if(upx-x>100){str="向右滑动";//改变图片img_test.setImageResource(R.drawable.icon_right);}else if(x-upx>100){str="向左滑动";//改变图片img_test.setImageResource(R.drawable.icon_left);}else if(upy-y>100){str="向下滑动";//改变图片img_test.setImageResource(R.drawable.icon_down);}else if(y-upy>100){str="向上滑动";//改变图片img_test.setImageResource(R.drawable.icon_up);}return str;}}
(4)实现 OnTouchListener 监听
/** * 第二种方式 * * 使用 GestureDetector 来进行操作 * */class GestureOntouchListener implements OnTouchListener{@Overridepublic boolean onTouch(View v, MotionEvent event) {//1.获得 motionEvent 对象gestureDetector.onTouchEvent(event);return true;}}
7. 总结
(1)实现 上下左右手势识别 ,通过两种方式 均可实现
(2)自定义手势识别写在下篇,内容比较多点
(3)Demo 下载 也在下篇
更多相关文章
- Android(安卓)判断真机和模拟器的方法
- Android之解决CoordinatorLayout+AppBarLayout+CollapsingToolba
- android 判断ip地址合法
- Android(安卓)通用获取Ip的方法(判断手机是否联网的方法)!!!
- android 横向滑动 HorizontalScrollView
- Android(安卓)- 如何判断当前线程是否是主线程
- android:onClick详解
- Android判断当前界面是否是桌面(主页)
- Material Design之TabLayout的用法(标题栏滑动+ViewPager)