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.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());
/**
* 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;
}
}
/**
* 第二种方式
*
* 使用 GestureDetector 来进行操作
*
*/
class GestureOntouchListener implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
//1.获得 motionEvent 对象
gestureDetector.onTouchEvent(event);
return true;
}
}
(1)实现 上下左右手势识别 ,通过两种方式 均可实现
(2)自定义手势识别写在下篇,内容比较多点
(3)Demo 下载 也在下篇