Chapter5-Android Scroll 分析

Android View体系是界面编程的核心,其重要性不亚于Android四大组件。

一. View简介

View是Android所有控件的基类,看下面这张图我们就会对其有一个直观的了解:

view层级结构

知道了View的层级关系有助于对View的理解,从上图可以发现我们常用的这些控件都是继承于View,如果我们更好的掌握了View的知识体系,那么我们在界面编程时则会更加的得心应手。

二. Android坐标系

Android中有两种坐标系,分别为Android坐标系和视图坐标系:

1.首先我们先来看看Android坐标系。

 在Android中,将屏幕的左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,原点向下是Y轴正方向。

这里写图片描述

在下文讲到的MotionEvent提供的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。

2.视图坐标系

它描述的是子视图在父视图的位置关系,和Android坐标系不矛盾也不复杂,他们是相辅相成的,与Android 坐标系类似 , 视图坐标系同样是以原点向右是X轴正方向,原点向下是Y轴正方向。

只不过有点不同的是: 视图坐标系的原点是以父视图左上角为坐标原点.

视图相对坐标系

了解视图坐标系各个方法 我们只需要看懂一张图就可以了:

视图坐标系各方法示意图

三. 一些API

Android 系统中提供了非常多的方法来获取坐标值和相对距离,对于刚入门的人来说,在什么情况下使用什么方法会有点困惑,下面总结了一些 API , 结合上面的图就可以很清晰的明白了.

1. View 获取自身宽高

  • getHeight(); 获取 View 自身的高度
  • getWidth(); 获取 View 自身的宽度

2. View 提供的获取坐标方法

通过如下方法可以获得View到其父控件的距离

  • getTop(); // 获取 View 自身 顶边 到其父布局 顶边 的距离
  • getLeft(); // 获取 View 自身 左边到其父布局 左边 的距离
  • getRight(); // 获取 View 自身 右边到其父布局 左边 的距离
  • getBottom(); // 获取 View 自身 底边到其父布局 顶边 的距离

3. MotionEvent提供的方法

看到上图深蓝色的圆点,假设这个圆点是我们触摸屏幕的点.
MotionEvent也提供了各种获取焦点坐标的方法:

① 视图坐标

  • getX(); // 获取点击事件 距离 控件左边的距离
  • getY(); // 获取点击事件 距离 控件顶边的距离

② 绝对坐标

  • getRawX(); // 获取点击事件距离 整个屏幕 左边的距离
  • getRawY(); // 获取点击事件距离 整个屏幕 顶边的距离

四. 触控事件 - MotionEvent

触控事件 MotionEvent 在与用户的交互中占据着举足轻重的地位,上面说了几个MotionEvent的方法,接下来我们说下使用的方法:

1.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方法来进行筛选。代码如下

public boolean onTouch( 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_UP:
                // 处理离开事件
                break;
            case MotionEvent.ACTION_MOVE:
                // 处理移动事件
                break;
            }
            return true;
        }

这阶段的笔记就到这,有什么不对的地方欢迎指出。
感谢 各大神的无私分享。
下一篇笔记是 如何实现滑动。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值