AndroidGesture手势以及手势库

Gesture手势及手势库

一、Gesture基础:
(一)、概念:
        所谓手势,其实是指用户手指或者触摸笔在触摸屏上的连续触碰行为。比如在屏幕上从左至右划出一个动作,就是手势。再比如在屏幕上画一个圆圈也是手势。手势这种连续的触碰会形成某个方向上的移动趋势,也会形成一个不规则的几何图形。
应用程序中的手势就是:多个持续的触摸事件在屏幕上形成特定的形状。

        Android对两种手势行为都提供了支持:
  1. 对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器;
  2. 对于第二种手势行为,Android允许开发者添加手势,并提供了相应的API识别用户手势。
(二)、原理:
        对于触摸屏,其原生的消息无非按下、抬起、移动这几种,我们只需要简单重载onTouch或者设置触摸侦听器setOnTouchListener即可进行处理。
        为了提高我们的APP的用户体验,有时候我们需要识别用户的手势,Android给我们提供了手势识别工具 GestureDetector。 GestureDetector的工作原理是,当我们接收到用户触摸消息时,将这个消息交给GestureDetector去加工,我们通过设置侦听器获得GestureDetector处理后的手势。


二、手势检测:        
(一)、 操作步骤
1、在View中实例化 GestureDetector,一个GestureDetector实例代表一个 手势检测器
2、构建GestureDetector时需要一个参数GestureDetector. OnGestureListener。OnGestureListener是一个监听器,负责对用户的手势行为提供相应。
3、重写该View的 onToutchEvent()方法,返回 detector.onToutchEvent(event).


(二)、OnGestureListener里包含的事件处理方法:
1、abstract boolean onDown(MotionEvent e);
// 单击,触摸屏按下时立刻触发

2、abstract boolean onSingleTapUp(MotionEvent e);
// 用户在触摸屏上 轻击并抬起,手指离开触摸屏时触发(而长按、滚动、滑动时,不会触发这个手势)

3、abstract void onShowPress(MotionEvent e);
// 重压,触摸屏按下后片刻后 抬起,会触发这个手势,如果迅速抬起则不会

4、abstract void onLongPress(MotionEvent e);
// 长按,触摸屏按下后既 不抬起也不移动,过一段时间后触发

5、abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
// 滚动,触摸屏 按下后移动
 
6、abstract boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY); 
// 滑动,触摸屏按下后 快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势  


(三)、实例代码:

1、手势检测核心代码:
public class MainActivity extends Activity {
private final static String TAG = "MainActivity" ;
private GestureDetector detector ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );

detector = new GestureDetector( this , new OnGestureListener() {
@Override
publicboolean onSingleTapUp(MotionEvent e) {
Log. i ( TAG , "==onSingleTapUp" + e.getAction());
returnfalse ;
}

@Override
public void onShowPress(MotionEvent e) {
Log. i ( TAG , "==onShowPress" + e.getAction());
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log. i ( TAG , "==onScroll" + e1.getAction() + ":" + e2.getAction());
returnfalse ;
}

@Override
public void onLongPress(MotionEvent e) {
Log. i ( TAG , "==onLongPress" + e.getAction());
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
Log. i ( TAG , "==onFling" + e1.getAction() + ":" + e2.getAction());
returnfalse ;
}

@Override
publicboolean onDown(MotionEvent e) {
Log. i ( TAG , "==onDown" + e.getAction());
returnfalse ;
}
});
}

@Override
publicboolean onTouchEvent(MotionEvent event) {
return detector .onTouchEvent(event);
}
}


2、通过手势缩放图片核心代码:
publicclass MainActivity extends Activity {
private GestureDetector detector ;
private ImageView
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值