作者:坦克大道_639 | 来源:互联网 | 2023-10-10 15:15
滑动效果的产生
滑动一个view,本质上就是说移动一个view。改变其当前所处的位置,他的原则与动画效果的实现非常相似,都是通过不断地改变view的坐标来实现这一效果。因此,要实现view滑动,就必须监听用户触摸事件,并根据事件传入的坐标,动态且不断的改变view的坐标,从而实现view的滑动。
先从基本的说起吧。
1.Android坐标系
view滑动需要参考一个标准,在Android中,屏幕的左上角顶点作为原点
而系统提供了
public void getLocationOnScreen(int[] location) {super.getLocationOnScreen(location);}
这样的方法来获取Android坐标系中的点的位置,就是该视图左上角的坐标。另外在触控事件中使用getRawX(),getRawY()方法获得的坐标同样是Android坐标系中的坐标。
2 视图坐标系
描述了子视图在父视图中的位置关系,他们的作用是相辅相成的,并不矛盾,不过在视图坐标系中的原点是父视图左上角的位置,如上图;
在触控事件中,通过getX(),getY()方法来获得视图中的坐标。
3 触控事件 ——MotionEvent
触控事件在与用户交互的过程中占据很重要的位置,学好这里的知识是掌握滑动的基础,首先咱么先看看MotionEvent封装的一些常用的事件常量;
常见的动作常量:
public static final int ACTION_DOWN = 0;public static final int ACTION_UP = 1;public static final int ACTION_MOVE = 2;public static final int ACTION_CANCEL = 3;public static final int ACTION_OUTSIDE = 4;public static final int ACTION_POINTER_DOWN = 5;public static final int ACTION_POINTER_UP = 6;
通常情况下,我们会在 onTouchEvent(MotionEvent event)方法中通过event.getAction()方法获取触控事件的类型,并使用switch-case方法进行删选,这个代码模式基本固定;
@Overridepublic boolean onTouchEvent(MotionEvent event) {int x=(int) event.getX();int y=(int) event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:break;default:break;}return true;}
在Android中提供了很多的方法来获取坐标值,相对距离等。方法丰富固然好,同样给我们带来了很多困扰,不知道在什么情况下使用它们,下面总结了一些API,结合坐标系咱们来看看;
View提供的获取坐标的方法
getTop();
view自身的顶边到其父布局顶边的距离;
getLeft();
view自身的左边到其父布局左边的距离;
getRight();
view自身的右边到其父布局左边的距离;
getBottom();
view自身的底边到其父布局顶边的距离;
MotionEvent提供的获取坐标系的方法
getX();
获取点击事件距离控件左边的距离,即视图坐标
getY();
获取点击事件距离控件顶边的距离,即视图坐标
getRawX();
获取点击事件距离整个屏幕左边的距离,即绝对坐标
getRawY();
获取点击事件距离整个屏幕顶边的距离,即绝对坐标
相信大家现在对于Android坐标,MotionEvent有了一个比较清楚的认识了,接下来的几章会进入我们的主题——滑动的七种方式。