美文网首页关于Android开发的那些事儿Android自定义控件Android开发经验谈
自定义View学习——Android 官方文档View解读(一)

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

作者: Bear_android | 来源:发表于2017-11-21 15:45 被阅读47次

    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加载出来后回调此方法
    1. 布局
    • onMeasure(int, int):当请求获取view以及它的所有子view的大小时回调
    • onLayout(boolean, int, int, int, int):当view需要给所有的子布局分配空间和设置位置时调用
    • onSizeChanged(int, int, int, int):当view的大小改变时回调
    1. 绘制
    • onDraw(android.graphics.Canvas):当view要呈现其内容时调用
    1. 事件处理
    • onKeyDown(int, KeyEvent):当发生新的硬件按键事件时调用
    • onKeyUp(int, KeyEvent):当发生硬件按键事件时调用
    • onTrackballEvent(MotionEvent):当轨迹球移动事件发生时调用
    • onTouchEvent(MotionEvent):当触摸屏幕事件发生时调用
    1. 焦点
    • onFocusChanged(boolean, int, android.graphics.Rect):当view获取或者失去焦点时调用
    • onWindowFocusChanged(boolean):当包含view的窗体得到或失去焦点时调用
    1. 填充(Attaching)
    • onAttachedToWindow():当view填充到窗体上时调用
    • onDetachedFromWindow():当view从窗体上分离时调用
    • onWindowVisibilityChanged(int):当包含view的窗体显隐状态发生改变时调用

    Position

    • ViewgetLeft()getRight()getTop()getBottom()
    • ViewgetY()getTranslationY()getTop() 之间的联系
    • ViewgetScroolYViewscrollTo()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)

    未完待续···

    相关文章

      网友评论

        本文标题:自定义View学习——Android 官方文档View解读(一)

        本文链接:https://www.haomeiwen.com/subject/pjjwvxtx.html