Chapter5-Android Scroll 分析
2016-06-22 15:27
337 查看
Android View体系是界面编程的核心,其重要性不亚于Android四大组件。
知道了View的层级关系有助于对View的理解,从上图可以发现我们常用的这些控件都是继承于View,如果我们更好的掌握了View的知识体系,那么我们在界面编程时则会更加的得心应手。
1.首先我们先来看看Android坐标系。
在下文讲到的MotionEvent提供的getRawX()和getRawY()获取的坐标都是Android坐标系的坐标。
2.视图坐标系
只不过有点不同的是: 视图坐标系的原点是以父视图左上角为坐标原点.
了解视图坐标系各个方法 我们只需要看懂一张图就可以了:
1. View 获取自身宽高
getHeight(); 获取 View 自身的高度
getWidth(); 获取 View 自身的宽度
2. View 提供的获取坐标方法
通过如下方法可以获得View到其父控件的距离
getTop(); // 获取 View 自身 顶边 到其父布局 顶边 的距离
getLeft(); // 获取 View 自身 左边到其父布局 左边 的距离
getRight(); // 获取 View 自身 右边到其父布局 左边 的距离
getBottom(); // 获取 View 自身 底边到其父布局 顶边 的距离
3. MotionEvent提供的方法
看到上图深蓝色的圆点,假设这个圆点是我们触摸屏幕的点.
MotionEvent也提供了各种获取焦点坐标的方法:
① 视图坐标
getX(); // 获取点击事件 距离 控件左边的距离
getY(); // 获取点击事件 距离 控件顶边的距离
② 绝对坐标
getRawX(); // 获取点击事件距离 整个屏幕 左边的距离
getRawY(); // 获取点击事件距离 整个屏幕 顶边的距离
1.MotionEvent封装的一些常用的 事件常量
通常情况下我们在onTouchEvent(MotionEvent event) 方法中通过 event.getAction() 来获取触控事件的类型,并使用switch-case方法来进行筛选。代码如下
这阶段的笔记就到这,有什么不对的地方欢迎指出。
感谢 各大神的无私分享。
下一篇笔记是 如何实现滑动。
一. 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; }
这阶段的笔记就到这,有什么不对的地方欢迎指出。
感谢 各大神的无私分享。
下一篇笔记是 如何实现滑动。
相关文章推荐
- Android开源框架BRVAH由来篇
- Material Design 最全解析_1 概述
- Android实用代码模块集锦
- 项目中---关于AlertDialog的显示
- AndroidM如何给所有预装软件所有请求的权限
- Android进程管理详解
- android 画虚线,显示实心解决方法
- Android 实现沉浸式状态栏效果(systembartint库)
- Android SQLite分页查询的三种方法
- Android retrofit 日志拦截器
- Android应用的目录组织结构,每个文件夹及文件的用途?
- Android中应用程序如何获得系统签名权限
- android 6.0 动态权限处理
- Android 冷知识(1)开机广播及一些特殊广播
- Android 自定义实现switch开关按钮
- Android_个人中心_修改个人信息
- Android Fragment 你应该知道的一切
- android 软键盘设置
- Android Fragment 真正的完全解析(下)
- Android 平台下使用 i2c-tools