OnTouchListener使用

public class ViewActivity extends Activity implements View.OnTouchListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.view_gestrue);        LinearLayout ll_context = (LinearLayout) findViewById(R.id.ll_context);        ll_context.setOnTouchListener(this);    }    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getActionMasked()) {            case MotionEvent.ACTION_DOWN:                Log.v("-->", "手指碰到屏幕");                break;            case MotionEvent.ACTION_MOVE:                Log.v("-->", "手指在移动");                break;            case MotionEvent.ACTION_OUTSIDE:                Log.v("-->", "手指离开view的边界");                break;            case MotionEvent.ACTION_UP:                Log.v("-->", "手指离开屏幕");                break;            case MotionEvent.ACTION_SCROLL:                Log.v("-->", "手指在滑动");                break;            case MotionEvent.ACTION_POINTER_DOWN:                Log.v("-->", "非主手指碰到屏幕");                break;            case MotionEvent.ACTION_POINTER_UP:                Log.v("-->", "非主手指离开屏幕");                break;        }        return true;//拦截事件    }}

Tip:MotionEvent常用方法

event.getY();//触碰点获取距离v顶部的距离event.getRawY();//触碰点获取距离屏幕顶部的距离event.getPointerCount();//获取触碰手指的个数

GestureDetector使用:

//GestureDetector这个类对外提供了两个接口:OnGestureListener,OnDoubleTapListener,还有一个内部类SimpleOnGestureListener。

GestureDetector.OnGestureListener接口:用来通知普通的手势事件,该接口有如下六个回调函数:

1.onDown(MotionEvent e):down事件;

2.onSingleTapUp(MotionEvent e):一次点击up事件;在touch down后又没有滑动
(onScroll),又没有长按(onLongPress),然后Touchup时触发。
点击一下非常快的(不滑动)Touchup:
onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

3.onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;Touch了还没有滑动时触发(与onDown,onLongPress)比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不滑动
按照onDown->onShowPress->onLongPress这个顺序触发。

4.onLongPress(MotionEvent e):长按事件;Touch了不移动一直Touch down时触发

5.onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;Touch了滑动一点距离后,在ACTION_UP时才会触发参数:e1 第1个ACTION_DOWN MotionEvent 并且只有一个;e2 最后一个ACTION_MOVE MotionEvent ;velocityX X轴上的移动速度,像素/秒 ;velocityY Y轴上的移动速度,像素/秒.触发条件:X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

6.onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法在ACTION_MOVE动作发生时就会触发
抛:手指触动屏幕后,稍微滑动后立即松开

GestureDetector.OnDoubleTapListener接口:用来通知DoubleTap事件,类似于鼠标的双击事件。

1.onDoubleTap(MotionEvent e):在双击的第二下,Touch down时触发 。
2.onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);双击的第二下Touch down和up都会触发,可用e.getAction()区分。
3.onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。这个方法不同于onSingleTapUp,他是在GestureDetector确信用户在第一次触摸屏幕后,没有紧跟着第二次触摸屏幕,也就是不是“双击”的时候触发

tip:

//distanceX,是前后两次call的X距离,不是e2与e1的水平距离; 是前后两次call的Y距离,不是e2与e1的垂直距离

使用方法:

1:继承GestureDetector.OnGestureListener
2:实例化检测器GestureDetector mDetector = new GestureDetector(ViewActivity.this, this);
3:在ontouch里面回调方法

@Overridepublic boolean onTouch(View v, MotionEvent event) {  mDetector.onTouchEvent(event);  return true;}

参考链接:
用户手势检测-GestureDetector使用详解
android触控,先了解MotionEvent

更多相关文章

  1. Android(安卓)滑动改变头部透明度
  2. ScrollView做的上拉效果
  3. Android(安卓)studio 单选按钮 的监听事件
  4. android入门 SeekBar
  5. Android-Scroller
  6. BaseQuickAdapter 刷新时候控件不显示
  7. Android(安卓)Gallery获取滑动停止的位置
  8. Android(安卓)Studio Button按钮点击事件
  9. 使用SmartRefreshLayout 给RecyclerView 添加反弹效果示例

随机推荐

  1. 波音787 Dreamliner机舱娱乐系统全面拥抱
  2. 美团外卖Android(安卓)Crash治理之路
  3. Android Studio下的串口程序开发实战
  4. 仿iPhone assistivetouch小工具实现详解0
  5. Android性能优化之绘制优化
  6. 一名Android开发者的微信小程序填坑之路(
  7. 一起Talk Android吧(第二百五十八回:Androi
  8. android十大常用对话框
  9. Android Studio内存泄漏分析实战-Android
  10. 关于“Android SDK manager中不出现完整A