Android Scroll分析 (一) 滑动效果是如何产生的

1.滑动效果是如何产生的

要实现View的滑动,就必须监听用户触摸的事件,并根据事件传入的坐标,动态且不断地改变View的坐标,从而实现View跟随用户触摸的滑动而滑动.
1.1 Android 坐标系
将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向.
系统提供了getLocationOnScreen(int location[])方法来获取Android坐标系中点的位置,即该视图左上角在Android坐标系中的坐标.
在触摸事件中使用getRawX() getRawY()方法所获得的坐标同样是Android坐标系中的坐标.

1.2视图坐标系

处理Android坐标系外,Android中还有视图坐标系,它表示子视图在父视图中的位置关系,视图坐标系同样是以原点向右为X轴正方向,向下为Y轴正方向,区别在于它的原点是以父视图左上角为坐标原点.
在触摸事件中,通过getX() getY()所获得的坐标就是视图坐标系中的坐标.

1.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方法来进行筛选:

//在onTouchEvent(MotionEvent event)方法中通过event.getAction()方法来获取触摸事件的类型,并使用switch-case方法来进行筛选:
@Override
public boolean onTouchEvent(MotionEvent event){
    //获取当前输入点的X/Y坐标(视图坐标)
    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;
    }
    return true;
}

系统提供了获取坐标值,相对距离的方法,这些方法可以分为如下两个类型:

//View提供的获取坐标方法
getTop()://获取到的是View自身的顶边到其父布局顶边的距离
getLeft()://View自身的左边到其父布局左边的距离
getRight()://View自身的右边到其父布局左边的距离
getBottom()://View自身的底边到其父布局顶边的距离
//MotionEvent()提供的方法
getX()://获取点击事件距离控件左边的距离,即视图坐标
getY()://距离控件顶边的距离,即视图坐标
getRawX()://距离整个屏幕左边的距离,即绝对坐标
getRawY()://距离整个屏幕顶边的距离,即绝对坐标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值