Android Scroll分析——滑动效果产生

  相对于在Android2.x版本上出现的长按、点击事件的效果,不得不说,滑动操做具备更好的用户体验。所以,从Android 4.X版本开始,出现了更多滑动操做的效果。愈来愈多第三方应用模仿这样的效果,来改善本身的应用。本文,咱们刨根问底来探寻滑动效果的产生。动画

  滑动效果如何产生spa

  滑动一个View,其本质就是移动一个View。即是改变它的坐标位置,它的原理与动画产生的效果原理应该是一模一样的。其最终本质都是改变其坐标。因此,咱们要实现View滑动的效果,就只须要监听用户的触摸事件,动态改变View的坐标。code

  这里,说道监听触摸事件,改变View坐标。咱们所以所以要了解窗口坐标系与屏幕触摸事件motionEvent。blog

  Android坐标系事件

  为何会有滑动一说了,初中的物理告诉咱们,是相对于坐标系发生了运动。在Android中,咱们将屏幕左上角定为坐标原点,从这个点向右为x轴的正方向,向下为y轴的正方向。如图所示:get

  除了这个系统坐标系以外,还有一个视图坐标系。与系统坐标系相似,以也是以原点向下为y轴的正方向,以原点向右为x轴的正方向。只不过,这个坐标原点是父控件左上角。如图所示:it

  咱们了解了坐标系,下面咱们就了解触摸事件——MotionEvent。io

  别小看这个MotionEvent事件,在与用户进行交互的过程当中,这个东东必不可少。首先,看他封装那些常量表明不一样的事件类型,以下所示:event

  //单点触摸属性按下事件
    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 ev)方法,而后使用switch-case方法进行判断处理,这些都是固定格式,代码以下:模板

switch (event.getAction()){
  //触摸按下事件
                    case  MotionEvent.ACTION_DOWN:
                   
                        break;
//触摸移动状态
                    case  MotionEvent.ACTION_MOVE:
                 
                     
                        break;
//触摸抬起状态
                    case  MotionEvent.ACTION_UP:
                        break;
                }

  通常状况,不涉及到多点触控的操做,通常用这个代码的模板都可以完成相应事件的监听。

  除此以外,Android系统提供不少方法获取坐标值与相对距离。给咱们初学者带来不多困惑,这里一张图就让你搞明白。如图所示:

 

  各类方法解释:

  getLeft()——获取view自身左边到其父控件左边距离。

  getRight()——获取view自身右边到其父控件左边距离。

  getTop()——获取view自身上边到其父控件上边距离。

  getBottom()——获取view自身下边到其父控件上边距离。

  getX()——获取点击事件距离控件左边的距离,即视图坐标。

  getY()——获取点击事件距离控件上边的距离,即视图坐标。

  getRawX()——获取点击事件距离控件屏幕左边的距离,即绝对坐标。

  getRawY()——获取点击事件距离屏幕上边的距离,即绝对坐标。

  这就是对滑动效果产生知识补充。本人才疏学浅,恳请吐槽。

相关文章
相关标签/搜索