滑动效果的七种方式


滑动效果的产生

滑动一个view,本质上就是说移动一个view。改变其当前所处的位置,他的原则与动画效果的实现非常相似,都是通过不断地改变view的坐标来实现这一效果。因此,要实现view滑动,就必须监听用户触摸事件,并根据事件传入的坐标,动态且不断的改变view的坐标,从而实现view的滑动。
先从基本的说起吧。
1.Android坐标系
view滑动需要参考一个标准,在Android中,屏幕的左上角顶点作为原点
这里写图片描述
而系统提供了

    public void getLocationOnScreen(int[] location) {
        // TODO Auto-generated method stub
        super.getLocationOnScreen(location);
    }

这样的方法来获取Android坐标系中的点的位置,就是该视图左上角的坐标。另外在触控事件中使用getRawX(),getRawY()方法获得的坐标同样是Android坐标系中的坐标。

2 视图坐标系

这里写图片描述

描述了子视图在父视图中的位置关系,他们的作用是相辅相成的,并不矛盾,不过在视图坐标系中的原点是父视图左上角的位置,如上图;
在触控事件中,通过getX(),getY()方法来获得视图中的坐标。
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方法进行删选,这个代码模式基本固定;
@Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        //获取当前输入点的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;

        default:
            break;
        }
        return true;
    }
在Android中提供了很多的方法来获取坐标值,相对距离等。方法丰富固然好,同样给我们带来了很多困扰,不知道在什么情况下使用它们,下面总结了一些API,结合坐标系咱们来看看;

这里写图片描述

View提供的获取坐标的方法
getTop();
view自身的顶边到其父布局顶边的距离;

getLeft();
view自身的左边到其父布局左边的距离;

getRight();
view自身的右边到其父布局左边的距离;

getBottom();
view自身的底边到其父布局顶边的距离;

MotionEvent提供的获取坐标系的方法

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

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

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

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

相信大家现在对于Android坐标,MotionEvent有了一个比较清楚的认识了,接下来的几章会进入我们的主题——滑动的七种方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值