1.滑动效果的产生
首先我们需要了解的是在Android中,将屏幕左上角作为坐标原点,已这个点根据X坐标轴往右为正方向,根据Y轴坐标往下为正方向。在ViewGroup中,子View的坐标原点是父View的左上角。其次,我们需要知晓Android屏幕的触碰事件,这其中我们常用的MotionEvent action的有
//单点触摸按下动作
ACTION_DOWN
//单点触摸离开动作
ACTION_UP
//触摸点移动动作
ACTION_MOVE
//触摸动作超出边界
ACTION_OUTSIDE
//多点触摸按下动作
ACTION_POINTER_DOW
//多点离开动作
ACTION_POINTER_UP
取消动作在与,当一个ViewGroup,两个View发生切换,原先的View被销毁,就会触发取消动作,在这些动作后,我们还有获得坐标值的方法:
- View提供的获取坐标方法
getTop():获取到的是View自身的顶边到其父布局顶边的距离
getLeft():获取到的是View自身的左边到其父布局左边的距离
getRight():获取到的是View自身的右边到其父布局右边的距离
getBottom():获取到的是View自身的底边到其父布局顶边的距离
- MotionEvent提供的方法
getX():获取点击事件距离控件左边的距离
getY():获取点击事件距离控件顶边的距离
getRawX():获取点击事件距离整个屏幕左边的距离
getRawY():获取点击事件距离整个屏幕顶边的距离
2.实现滑动的方法
- 使用onLayout()方法进行重绘
- 使用offsetLeftAndRight()与offsetTopAndBotton()方法来重绘
- 使用setLayoutParams进行便宜
- 使用scrollTo和scrollBy
- 使用Scroller类,重写computeScroll方法,然后使用startScroll()方法
- 使用ViewDragHelper进行滑动,具体步骤为初始化ViewDragHelper,重写onInterceptTouchEvent()拦截方法,使用onTouchEvent()来传递触摸事件,同时我们需要重写computeScroll()方法,外加实现ViewDragHelper的Callback实现,在Callback中,我们需要实现的有tryCaptureView(),这个方法可以让我们指定我们所需要动的view,最后我们要写的是相关的clampViewPositionHorizontal()和clampViewPositionVerticl(),分别是水平和垂直方向的移动。如果我们需要对View拖动进行优化,我们也可以重写onViewRelased()方法,此方法是是拖动结束后调用。当然ViewDragHelper还有大量的监听事件,下面列举一些事件
- onViewCaptured 这个事件在用户触摸到View后回调
- onViewDragStateChanged 这个事件在拖曳状态改变时回调,比如idle, draggging等状态
- onViewPositionChanged() 这个事件在位置改变时回调,常用于滑动时更改scale进行缩放等效果