您的位置:首页 > 移动开发 > Android开发

Chapter5-Android Scroll 分析

2016-06-22 15:27 337 查看
Android View体系是界面编程的核心,其重要性不亚于Android四大组件。

一. View简介

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



知道了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;
}


这阶段的笔记就到这,有什么不对的地方欢迎指出。

感谢 各大神的无私分享。

下一篇笔记是 如何实现滑动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: