计划开始自定义View从零开始的笔记整理了~~
Provides classes that expose basic user interface classes that handle screen layout and interaction with the user
官网关于View是如上概括的,大概意思是提供处理屏幕布局和用户交互界面类的接口。
注解类
ViewDebug.CapturedViewProperty:这个注解可以用来标记捕获视图时要转储的字段和方法。带有这个注解的方法必须没有参数,并且必须返回一个有效类型的数据
ViewDebug.ExportedProperty:这个注解可以用来标记视图服务器转储的字段和方法。只有没有参数的非void方法才能被这个注解注释掉。
ViewDebug.FlagToString:定义从一个标志到一个字符串的映射。这样的映射可以在@ExportedProperty中使用,为最终用户提供更有意义的值。
ViewDebug.IntToString:定义从int值到String的映射。这样的映射可以在@ExportedProperty中使用,为最终用户提供更有意义的值。
重点标记的接口
CollapsibleActionView:当一个View实现这个接口时,它将在扩展或折叠时作为一个动作视图接收回调,以及可选的,应用程序指定的对MenuItem.OnActionExpandListener的回调。
GestureDetector.OnContextClickListener:当context发生点击时回调
GestureDetector.OnDoubleTapListener:当双击或者确认单击时回调
View
表示构建用户界面的基础类。在屏幕中是一块用来绘制和处理事件的矩形区域。View
是用来创建用户交互界面(按钮、文本框等)组建的基类。ViewGroup
子类是布局的基类,它是不可见的容器,用于存放其他视图(或其他视图组),并定义其布局属性。
为了实现一个自定义的视图,你通常会首先提供一些框架在所有视图中调用的标准方法的重写。您不需要覆盖所有这些方法。实际上可以只重写onDraw()
方法。下面是一些自定义View
时需要了解的方法:
1. 创建
Constructors 构造方法:当从代码创建视图时调用构造函数的一种形式,以及从布局文件xml视图时调用的形式。第二种形式应解析和应用布局文件中定义的任何属性。
onFinishInflate()
:当view
和它的子布局都从xml加载出来后回调此方法
2. 布局
onMeasure(int, int)
:当请求获取view
以及它的所有子view
的大小时回调onLayout(boolean, int, int, int, int)
:当view
需要给所有的子布局分配空间和设置位置时调用onSizeChanged(int, int, int, int)
:当view
的大小改变时回调
3. 绘制
onDraw(android.graphics.Canvas)
:当view
要呈现其内容时调用
4. 事件处理
onKeyDown(int, KeyEvent)
:当发生新的硬件按键事件时调用onKeyUp(int, KeyEvent)
:当发生硬件按键事件时调用onTrackballEvent(MotionEvent)
:当轨迹球移动事件发生时调用onTouchEvent(MotionEvent)
:当触摸屏幕事件发生时调用
5. 焦点
onFocusChanged(boolean, int, android.graphics.Rect)
:当view
获取或者失去焦点时调用onWindowFocusChanged(boolean)
:当包含view
的窗体得到或失去焦点时调用
6. 填充(Attaching)
onAttachedToWindow()
:当view
填充到窗体上时调用onDetachedFromWindow()
:当view
从窗体上分离时调用onWindowVisibilityChanged(int)
:当包含view
的窗体显隐状态发生改变时调用
Position
View
的getLeft()
和getRight()
和getTop()
和getBottom()
View
的getY()
,getTranslationY()
和getTop()
之间的联系View
的getScroolY
和View
的scrollTo()
和scrollBy()
event.getY()
和event.getRawY()
先来看个截图:
最大的草绿色区域时屏幕界面,红色次大的区域我们称之为“应用界面区域”。屏幕顶端,应用界面之外的区域含有运营商,电池时间等称之为“状态栏”。一般应用界面会含有标题栏也就是紫色标记的区域。
View.getLeft() View.getRight() View.getTop() View.getBottom()
这四个方法是获取View针对其直接父布局的左上角和右下角的的坐标。View.getLeft()
是左上角的x
坐标,View.getTop()
是左上角的Y
坐标。。View.getRight()
是右下角的x
坐标,View.getBottom()
是右下角的Y
坐标。
举个例子:求标题栏的left
,top
,right
,bottom
。相对于它的直接父布局为红色应用区域,红色区域左上角为坐标系原点。以actionBar和180*800的屏幕为例,actionBar
高度为58px
则左上角,右下角的坐标分别为(0,0)
和(480,58)
未完待续···