程序员

Android View 的滑动方式

2018-11-07  本文已影响13人  maoqitian

前言

自定义View作为Android进阶的基础,是我们开发者不得不学习的知识,而酷炫的自定义View效果,都离不开View的滑动,所以接下来我们来一起探究View的滑动方式,看看View是如何滑动的,为Android进阶的道路打下基础。

layout1.gif mScrollX和mScrollY值的判断.png
- 结合上面的知识,我们将上面滑动的例子改写一下,如果使用scrollTo()则只是滑动到我们手指滑动偏移量的距离的点,达不到要求,而scrollBy()是在scrollTo()的基础上偏移滑动的位置,正好符合我们自由滑动的要求,并且根据上面的分析mScrollX和mScrollY为负值,则滑动偏移也应该为负值才能达到我们想要的自由滑动效果(这个大家需要自己好好想明白可能才会更加清楚理解)  
 ```
   case MotionEvent.ACTION_MOVE:
            //手指移动偏移量
            int offsetX = (int) (x-lastX);
            int offsetY = (int) (y-lastY);
            //滑动方式1
            ((View)getParent()).scrollBy(-offsetX,-offsetY);
            break;
 ```  
view的位置没有发生改变.png objectAnimator.gif
- 改变布局参数 LayoutParams 滑动View

  - 平常我们开发设置View的位置可以在xml中设定,也可以在代码中设置。LayoutParams有一个View的所有布局参数信息,所有我们可以通过设置View的LayoutParams参数的leftMargin和topMargin达到上面自由滑动View的效果。
  
   ```
   ......
   case MotionEvent.ACTION_MOVE:
            //手指移动偏移量
            int offsetX = (int) (x-lastX);
            int offsetY = (int) (y-lastY);
            //滑动方式5
            moveView(offsetX,offsetY);
            break;
    
   ......
   
   private void moveView(int offsetX, int offsetY) {
    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
    layoutParams.leftMargin = getLeft() + offsetX;
    layoutParams.topMargin = getTop() + offsetY;
    setLayoutParams(layoutParams);
    }
   ```

到此,View的滑动方式就已经了解完了。如果文章中有写得不对的地方,请给我留言指出,大家一起学习进步。如果觉得我的文章给予你帮助,也请给我一个喜欢和关注。

上一篇下一篇

猜你喜欢

热点阅读