继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

自定义View——Android 官方文档View解读(一)

拉丁的传说
关注TA
已关注
手记 448
粉丝 126
获赞 788

计划开始自定义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()

先来看个截图:

screen.png

最大的草绿色区域时屏幕界面,红色次大的区域我们称之为“应用界面区域”。屏幕顶端,应用界面之外的区域含有运营商,电池时间等称之为“状态栏”。一般应用界面会含有标题栏也就是紫色标记的区域。

View.getLeft()
View.getRight()
View.getTop()
View.getBottom()

这四个方法是获取View针对其直接父布局的左上角和右下角的的坐标。View.getLeft()是左上角的x坐标,View.getTop()是左上角的Y坐标。。View.getRight()是右下角的x坐标,View.getBottom()是右下角的Y坐标。

举个例子:求标题栏的lefttoprightbottom。相对于它的直接父布局为红色应用区域,红色区域左上角为坐标系原点。以actionBar和180*800的屏幕为例,actionBar高度为58px则左上角,右下角的坐标分别为(0,0)(480,58)

未完待续···

原文链接:http://www.apkbus.com/blog-302849-76537.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP