Android Scroll分析

2018-07-06  本文已影响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)中


上一篇 下一篇

猜你喜欢

热点阅读