您的位置:首页 > 移动开发 > Android开发

Android-手势识别(普通手势识别:上 下 左 右 ;自定义手势识别:对号,错号 等)

2015-08-30 15:10 316 查看
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;

@Override
public 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{

@Override
public 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{

@Override
public boolean onTouch(View v, MotionEvent event) {
//1.获得 motionEvent 对象
gestureDetector.onTouchEvent(event);
return true;
}
}

7. 总结
   (1)实现 上下左右手势识别 ,通过两种方式 均可实现 

   (2)自定义手势识别写在下篇,内容比较多点

   (3)Demo 下载 也在下篇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息