android中的划屏事件 GestureDetector.OnGestureListener 详解(一)
2014-07-15 10:50
405 查看
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比我们今天所说的触摸屏相关的事件,就是通 过onTouchListener。其次,所有View的子类都可以通过setOnTouchListener()、 setOnKeyListener()等方法来添加对某一类事件的监听器。第三,Listener一般会以Interface(接口)的方式来提供,其中
包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。这样,当我们给某个view设 置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callbakc函数给予适 当的响应。
我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松
开触摸屏,ACTION_CANCEL不会由用户直接触发(所以不在今天的讨论范围,请参考ViewGroup.onInterceptTouchEvent(MotionEvent))。借助对于用户不同操作的判断,结合getRawX()、getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。
*****************************************************************************************************************************************
getRawX(),getX()的区别:
当你触到按钮时,x,y是相对于该按钮左上点(控件本身)的相对位置。
而rawx,rawy始终是相对于屏幕的位置。
另 如下图
可知:
getRowX:触摸点相对于屏幕的坐标
getX: 触摸点相对于按钮的坐标
getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标
*********************************************************************************************************************
在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给
GestureDetector 来分析是否有合适的callback函数来处理用户的手势。
包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。这样,当我们给某个view设 置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callbakc函数给予适 当的响应。
我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松
开触摸屏,ACTION_CANCEL不会由用户直接触发(所以不在今天的讨论范围,请参考ViewGroup.onInterceptTouchEvent(MotionEvent))。借助对于用户不同操作的判断,结合getRawX()、getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。
*****************************************************************************************************************************************
getRawX(),getX()的区别:
当你触到按钮时,x,y是相对于该按钮左上点(控件本身)的相对位置。
而rawx,rawy始终是相对于屏幕的位置。
另 如下图
可知:
getRowX:触摸点相对于屏幕的坐标
getX: 触摸点相对于按钮的坐标
getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标
*********************************************************************************************************************
在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给
GestureDetector 来分析是否有合适的callback函数来处理用户的手势。
相关文章推荐
- android中的划屏事件 GestureDetector.OnGestureListener 详解(二)
- android学习——GestureDetector.OnGestureListener 详解
- android学习——GestureDetector.OnGestureListener 详解
- android 解决GestureDetector.SimpleOnGestureListener中对某些view,点击之后总是触发longPress事件
- Android — GestureDetector.OnGestureListener 详解
- GestureDetector.OnGestureListener 详解以及android手势动作详解!
- android学习——GestureDetector.OnGestureListener 详解
- GestureDetector.OnGestureListener 详解(转)
- GestureDetector.OnGestureListener 详解
- android.view.GestureDetector.OnGestureListener onFling() vs onScroll()
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
- Android The constructor GestureDetector(GestureDetector.OnGestureListener) is deprecated
- GestureDetector.OnGestureListener 详解
- GestureDetector.OnGestureListener 详解
- GestureDetector.OnGestureListener 详解
- 通过ViewFlipper和GestureDetector.OnGestureListener实现自动播放和手势滑屏事件
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
- GestureDetector.OnGestureListener 详解
- 用户检测手势Gesture implements android.view.GestureDetector.OnGestureListener
- GestureDetector.OnGestureListener 详解