美文网首页
Android Scroll分析

Android Scroll分析

作者: 小二的学习日记 | 来源:发表于2018-07-06 16:02 被阅读0次

    本文是《Android群英传》的读书笔记

    滑动效果是如何产生的?

    不断的改变View的坐标

    Android坐标系:

    将屏幕最左上角的定点作为Android坐标原点。

    Android坐标系

    视图坐标系:

    以父视图左上角为坐标原点。

    视图坐标系

    触控事件——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;

    获取触控时间的类型:(模式基本固定)

    获取触控时间的类型

    获取坐标值的各种方法:

    获取坐标值的各种方法

    View提供的获取坐标方法:

    getTop():获取到的是View 自身的顶边到其父布局顶边的距离

    getLeft():获取到的是View自身的左边到其父布局左边的距离

    getRight():获取到的是View 自身的右边到其父布局左边的距离

    getBottom():获取到的是View自身的底边到其父布局顶边的距离

    MotionEvent提供的方法:

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

    getY():获取点击事件距离控件顶部的距离,

    即视图坐标

    getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标

    getRawY():获取点击事件距离整个屏幕顶边的距离,即绝对坐标

    实现滑动的方式

    布局

    1、创建DragView自定义View控件,继承View。

    2、初始化构造方法。

    3、重写onTouchEvent(MotionEvent event)方法

    方法1:重写layout()方法 方法2:直接移动左右和上下的偏移量 方法3:通过改变左外边距和上外边距的参数,改变位置 方法4:通过改变左外边距和上外边距的参数,改变位置 方法5:通过scrollBy方法改变位置

    scrollTo与scrollBy:

    scrollTo(x,y):表示移动到一个具体的坐标点(x,y)。

    scrollBy(dx,dy):表示移动的增量为dx、dy。

    这两个方法移动的是View 的content,即让View 的内容移动,如果在ViewGroup中使用scrollTo、scrollBy方法,那么移动的是所有子View,但如果在View中使用,那么移动的将是View的内容,例如TextView,content就是它的文本;ImageView,content就是它的drawable对象。

    中间的矩形相当于屏幕,即可是区域。后面的content就相当于画布,代表视图。大家可以看到,只有视图的中间部分是可视的,其他部分都不可见。在可见区域中,我们设置了一个Button,它的坐标为(20,10)。

    下面使用scrollBy方法,将盖板(屏幕,可视区域),在水平方向上向X轴正方向(右方)平移20,在数值方向上向Y轴正方向(下方)平移10,那么平移之后的可视区域如图。

    我们可以发信啊,虽然设置scrollBy(20,10),偏移量均为X轴、Y轴正方向上的正数,但是在屏幕的可视区域内,Button却向X轴、Y轴负方向上移动了。这就是因为参考系选择的不同,而产生的不同效果。

    Scroller:

    可以实现平滑移动的效果,而不再是瞬间完成的移动。

    Demo:同样让子View跟随手指的滑动而滑动,但是在手指离开屏幕时,让子View平滑的移动到初始位置,即屏幕左上角。

    代码:

    1、通过自定义View的构造方法创建一个Scroller对象。

    2、重写computeScroll()方法,实现模拟滑动。

    3、startScroll开启模拟过程:

    public void startScroll(int startX,int startY,int dx,int dy,int duration)

    public void startScroll(int startX,int startY,int dx,int dy)

    在onTouchEvent(MotionEvent event)中


    相关文章

      网友评论

          本文标题:Android Scroll分析

          本文链接:https://www.haomeiwen.com/subject/kjmpuftx.html