Android中实现滑动的7种方法
前置知识
Android坐标系
Android坐标系以屏幕的左上角这个点为原点,向右为x轴正方向,向下为y轴正方向;可以使用getLocationOnScreen(int location[])这样的方法来获取Android坐标系中点的位置,即该视图左上角在ANdroid坐标系中的坐标。在触控事件中,使用getRawX()、getRawY()方法获取的坐标也是Android坐标系中的坐标。
视图坐标系
视图坐标系描述的是子视图在父视图中的位置关系;视图坐标系以父视图左上角为坐标原点,原点向右为x轴正方向,原点向下为Y轴正方向。通过getX()、getY()所获得的坐标就是视图坐标系中的坐标。
触控事件—MotionEvent
MotionEvent中封装了一些常用的事件常量,定义了触控事件的不同类型,如下图所示:
我们一般会重写onTouchEvent(MotionEvent event)方法,在这个方法中通过event.getAction()方法拉货去触控事件的类型,然后对不同的事件进行不同的处理。
获取坐标的方法
Android中提供了许多获取坐标的方法,主要可以分为两类
- View提供的获取坐标的方法
- getTop():获取到的是View自身的顶边到其父布局顶边的距离
- getLeft():获取到的是View自身的左边到其夫布局左边的距离
- getRight():获取的是View自身右边到其父布局右边的距离
- getBottom():获取到的是View自身的底边到其父布局顶边的距离
- MotionEvent提供的方法
- getX():获取点击事件距离控件左边的距离,即视图坐标
- getY():获取点击事件距离控件顶边的距离,即视图坐标
- getRawX():获取点击事件距离整个屏幕左边的距离,即视图坐标
- getRawY():获取点击事件距离整个屏幕顶边的距离,即视图坐标
各个方法的图示如下:
实现滑动的7种方法
layout方法
由于View在进行绘制时,会调用onLayout()方法来设置显示的位置,所以可以通过修改View的left、top、right、bottom四个属性来控制View的坐标。
offsetLeftAndRight()和offsetTopAndBottom()
这个方法相当于系统提供的一个封装,只需要给方法传入偏移量即可完成layout的效果。
LayoutParams
LayoutParams保存了一个View的布局参数,因此可以通过哦LayoutParams来动态地修改一个布局的位置参数,从而达到改变View位置的效果。通过getLayoutParams()可以很方便地获取到LayoutParams,然后计算偏移量,最后通过setLayoutParams给View设置新的位置。需要注意的是通过getLayoutParams()获取LayoutParams时,要根据View所在父布局的类型来设置不同的类型,如果父布局是LinearLayout,那么使用的是LinearLayout.LayoutParams;如果是RelativeLayout,使用RelativeLayout.LayoutParams。如果觉得麻烦,可以使用ViewGroup.MarginLayoutParams,不需要考虑父布局的类型。
scrollTo和scrollBy
Scroller
属性动画
ViewDragHelper
参考
- Android群英传