webview双击事件的捕获

来源:互联网 发布:友情岁月演唱会知乎 编辑:程序博客网 时间:2024/04/28 17:33

很多时候我们需要实现双击webview全屏显示的功能,那么我们首先要捕获到webview控件的双击事件:

首先初始化webview,这里我就不贴代码了,然后:

private GestureDetector mGestureDetector;
mGestureDetector = new GestureDetector(this, new MyGestureListener());

这里可以看到,采用了GestureDetector,那么接下来:

mWebView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubreturn mGestureDetector.onTouchEvent(event);}});


要注意的是,我经过测试发现webview.setOnClickListener捕获不到点击事件,直接使用屏幕点击也不可以,好像是事件被吃掉了,但是这种wenview.wetOnTouchListener是可行的,可以捕获到webview控件的点击事件。那么双击事件怎么捕获呢?网上很多说法是在单击事件中记录秒数然后计算差值,小于一个阀值就算双击了,但是经过我的实验是不可行的。Android有一个SimpleOnGestureListener是可以监听到双击事件的,那么问题就简单了:

private class MyGestureListener extends SimpleOnGestureListener{   @Overridepublic boolean onDoubleTap(MotionEvent e) {//webview的双击事件// TODO Auto-generated method stubif(TAG%2==0){rl_top.startAnimation(translate_top_in);rl_top.setVisibility(View.VISIBLE);ll_down.startAnimation(translate_down_in);ll_down.setVisibility(View.VISIBLE);TAG++;}else {rl_top.setVisibility(View.GONE);ll_down.setVisibility(View.GONE);TAG++;}return super.onDoubleTap(e);}}

双击事件就这样被捕获到了,那么全屏什么的操作就迎刃而解了吧!那么我们可以学习下SimpleOnGestureListener可以监听到的其他事件:

private class MySimpleGesture extends SimpleOnGestureListener {          // 双击的第二下Touch down时触发          public boolean onDoubleTap(MotionEvent e) {              Log.i("MyGesture", "onDoubleTap");              return super.onDoubleTap(e);          }            // 双击的第二下Touch down和up都会触发,可用e.getAction()区分          public boolean onDoubleTapEvent(MotionEvent e) {              Log.i("MyGesture", "onDoubleTapEvent");              return super.onDoubleTapEvent(e);          }            // Touch down时触发          public boolean onDown(MotionEvent e) {              Log.i("MyGesture", "onDown");              return super.onDown(e);          }            // Touch了滑动一点距离后,up时触发          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                  float velocityY) {              Log.i("MyGesture", "onFling");              return super.onFling(e1, e2, velocityX, velocityY);          }            // Touch了不移动一直Touch down时触发          public void onLongPress(MotionEvent e) {              Log.i("MyGesture", "onLongPress");              super.onLongPress(e);          }            // Touch了滑动时触发          public boolean onScroll(MotionEvent e1, MotionEvent e2,                  float distanceX, float distanceY) {              Log.i("MyGesture", "onScroll");              return super.onScroll(e1, e2, distanceX, distanceY);          }            /*          * Touch了还没有滑动时触发 (1)onDown只要Touch Down一定立刻触发 (2)Touch          * Down后过一会没有滑动先触发onShowPress再触发onLongPress So: Touch Down后一直不滑动,onDown          * -> onShowPress -> onLongPress这个顺序触发。          */          public void onShowPress(MotionEvent e) {              Log.i("MyGesture", "onShowPress");              super.onShowPress(e);          }            /*          * 两个函数都是在Touch Down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touch Up时触发          * 点击一下非常快的(不滑动)Touch Up: onDown->onSingleTapUp->onSingleTapConfirmed          * 点击一下稍微慢点的(不滑动)Touch Up://确认是单击事件触发          * onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed          */          public boolean onSingleTapConfirmed(MotionEvent e) {              Log.i("MyGesture", "onSingleTapConfirmed");              return super.onSingleTapConfirmed(e);          }            public boolean onSingleTapUp(MotionEvent e) {              Log.i("MyGesture", "onSingleTapUp");              return super.onSingleTapUp(e);          }      }  

这段学习的代码来自http://blog.csdn.net/huangbiao86/article/details/6745670博文,供大家学习,因为有详细的注解,这里我就直接拿过来展示用了。


谢谢大家!!


0 0