viewpager上下滑动

为了实现左右滑动和上下滑动的灵活性,在ViewPager子类里实现了自定义的手势GestureDetector。

测试时,在一个商品上不停的点击、进入浏览器、返回、再点击、再返回,连续三、四次之后,就被困在一个ViewPager页面里出不来了,左右滑动失灵。并且能够屡次重现。

后来在能加Log的地方都加上Log,一句一句的跟踪,发现是LongPress造成的,ViewPager如果接收了LongPress事件,左右滑动立马失灵。

增加了一行代码:mGestureDetector.setIsLongpressEnabled(false);

将LongPress禁用。一切恢复正常。

ListView在ViewPager中导致左右滑动失效

下面是GestureDetector 这个类的概括情况

  • 首先,Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,就是通过onTouchListener实现;
  • 其次,所有View的子类都可以通过setOnTouchListener()、setOnKeyListener()等方法来添加对某一类事件的Listener
  • 第三,Listener一般会以Interface的方式来提供,其中包含一个或多个abstract方法,我们需要实现这些方法来完成onTouch()、onKey()等操作。这样,程序便可以在特定的事件被dispatch到该view的时候,通过callback函数给予适当的响应。

根据 MotionEvent事件检测各种手势,通过MotionEventgetAction()方法来获取Touch事件的类型,包括 ACTION_DOWN(按下触摸屏), ACTION_MOVE(按下触摸屏后移动受力点), ACTION_UP(松开触摸屏)和ACTION_CANCEL不会由用户直接触发)。借助对于用户不同操作的判断,结合getRawX()、getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。

当我们捕捉到Touch操作的时候,如何识别出用户的Gesture?

Android中的Gesture识别(detector)是通过GestureDetector.OnGestureListener接口实现的。

GestureDetector.OnGestureListener 回调函数用于通知用户发生的手势动作。该类仅处理MotionEvent 事件中的触摸事件(不处理轨迹球事件)。 使用该类的方法如下:

首先需要在初始化的时候创建GestureDetector对象实例:

  • 接口 OnDoubleTapListener 手势监听器 用于双击时发出通知
  • 接口 OnGestureListener 手势监听器 用于发送手势操作时发生通知 如 拖动,长按,按下,弹起 等手势操作
    • onDown(MotionEvente)  //当轻触手势按下屏幕 时发生的事件
    • onFling(MotionEvent e1, MotionEvente2, float velocityX, float velocityY) //快速滑动后抬起事件的通知.由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
    • onLongPress(MotionEvente) //长按时的通知事件,由多个MotionEvent ACTION_DOWN触发
    • onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)  //滑动屏幕时通知事件 为了方便提供了X轴和Y轴上的滚动距离.由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
    • onShowPress(MotionEvente)  //当用户长点击后抬起时通知事件,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
    • onSingleTapUp(MotionEvente)  //当轻触手势抬起屏幕时发生的事件.由一个1个MotionEvent ACTION_UP触发
  • SimpleOnGestureListener – GestureDetector的扩展类 这个类的作用是当我们只想使用部分手势时, 而非全部的时候 就可以继承这个类

在实际应用中 我们根据我们所需要的功能实现不同的接口 或者 继承自SimpleOnGestureListener 类,只实现部分个人需要的方法 就可以了

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: