Android View 事件分发机制

触摸事件处理框架

Android 的 View 和 ViewGroup 采用了 Composite(组合) 设计模式,View 的组合具有高度动态性,在这种情况下,由于触摸事件是从底层驱动传递至上层 View 对象,如果按照普通对象间传递信息的方式,将会很复杂,很难处理,这里 Android 采用了 Chain of Responsibility(责任链) 设计模式,触摸事件流将通过视图树,使每个 View 对象都有机会处理事件,一旦某个 View 选择接收事件流,那么整个事件将交给它处理,如果 View 选择不处理,那么事件流会继续传递,直到找到最后的处理者,在处理触摸事件时有几个重要的方法,在弄懂 Android 事件分发机制之前,需要先了解这几个方法的作用及关系。

阅读更多

Android 坐标系和 View 滑动方法

Android 二维坐标系

和 Java 图形化界面开发类似,Android 中也有一种坐标系,这里说说二维平面的坐标系,在 Android 中,坐标系起始点以左上角为原点,竖直向下是 y 轴的方向,横向向右是 x 轴延伸方向,对于 Android 中的 View 来说,它本身所具有的一些位置相关的参数会根据这个坐标系来确定数值和正负,掌握这些有助于理解 View 在布局层次中所处位置的意义。

下面用一个典型例子来说明 Android 中的坐标系:

阅读更多

Android Activity 任务栈

前言

一个 Android 应用中与用户产生交互的一系列 Android 被称为任务,Android 系统使用栈来管理这些 activity,它们的行为如下:

当在桌面点击一个应用图标打开主界面时,如果之前没有打开过这个应用,将会创建一个全新的任务栈,并把主界面的 activity1 作为栈底元素入栈,当用户从主界面依次打开 activity2, activity3 时,它们会被依次压入栈中,此时栈内元素为 activity1, activity2, activity3,用户点击返回键时,activity3将被被执行 finish 操作,同时将会出栈,activity2 恢复,继续点击返回键,直到退回到主界面时,如果再次点击返回键,则应用退出,任务栈被销毁。

不同应用可以指定相同的任务,同一个应用中的 Android 也可存在于多个任务中,还可使用一些选项影响 Android 在任务栈中的行为。更详细的文档可以参考官方指南:

AndroidAPI 指南:任务和返回栈

下面对和任务栈相关的选项和配置进行详细分析:

阅读更多

Android 自定义 View

概述

View 是由视图和属性组成的控件,实现一个 View 的自定义,主要包括定义它自身的尺寸,以及绘制它的内容,并且在自身属性发生改变时能正确更新其绘制的内容。

ViewGroup 是 View 的容器类型,内部可容纳多个 View,并对子 View 的位置进行规划,根据自身特性的不同,子 View 的摆放特点也各不相同。由于 ViewGroup 本身也是 View 的子类,所以 ViewGroup 本身也可作为子View 出现。自定义 ViewGroup 时,更着重于对子 View 位置的处理,并且尺寸由子 View 的尺寸和摆放位置决定,在一些复杂的自定义 View 中,内容的绘制和子 View 位置的处理可能显的同等重要。

阅读更多