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;        }

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

更多相关文章

  1. Android之使用adb wireless进行调试
  2. Android开发最佳实践
  3. Android(安卓)2017 开源库 (持续更新)
  4. ListView 和 Adapter 的基础
  5. Android系统gesture的识别过程浅析
  6. Android(安卓)进阶学习:Android视图状态及重绘流程分析,带你一步步
  7. android之View和SurfaceView
  8. 专题 - Web应用->Web应用中适配不同屏幕
  9. Android中layout过程详解 (结合Android(安卓)4.0.4 最新源码)

随机推荐

  1. 关于Android中的Intent一点说明
  2. Android中的拿来主义
  3. android构建系统总览
  4. Android平台上四种保存数据的方法
  5. 51 信用卡管家 Android(安卓)客户端内部
  6. android植入广告赚钱是不是只是个梦??
  7. 使用EasyPermissions高效处理权限
  8. 设置界面android 设置界面
  9. speex算法在android上的移植
  10. 为菜鸟量身定制0基础android逆袭课程(颠覆