一、View基础知识

View基础知识

前言

View基础知识点,完全可以参考文章自定义View基础 - 最易懂的自定义View原理系列(1),这篇文章已经非常的详细。

我这里将我理解的东西总结一下。

View与ViewGroup

View

View的代码有近3万行,文件大小有1M,这是一个非常庞大的代码,我想谁也不愿意读完全部代码来分析它的机制,而是更愿意通过官方的文档来理解。

This class represents the basic building block for user interface components. A View occupies a rectangular area on the screen and is responsible for drawing and event handling. View is the base class for widgets, which are used to create interactive UI components (buttons, text fields, etc.). The {@link android.view.ViewGroup} subclass is the base class for layouts, which are invisible containers that hold other Views (or other ViewGroups) and define their layout properties.

翻译:View代表了用户界面组件的基础构建模块。View占据屏幕上的一块矩形区域,负责绘制和处理事件(屏幕触摸事件)。Viewwidget的基类,用于创造交互式的UI控件,如Button等。子类ViewGrouplayout的基类,layout是不可见的容器,用于包含其他ViewViewGroup,并且定义布局属性。

大致意思是(重点),View作为交互式组件,而ViewGroup则是用于布局。

ViewGroup

A ViewGroup is a special view that can contain other views (called children.) The view group is the base class for layouts and views containers. This class also defines the {@link android.view.ViewGroup.LayoutParams} class which serves as the base class for layouts parameters.

翻译:ViewGroup是特殊的View,用于包含其他的View(被称为children)。ViewGrouplayout的基类,也可以说是View的容器。在其中定义了ViewGroup.LayoutParams类,是layout parameters的基类。

这里再次说明了ViewGroup的任务是布局。而ViewGroup.LayoutParams则是封装了布局的参数。

强调

我再换一种说法解释上面的内容:

  1. View用于显示内容,着重在于measuredrawtouch event
  2. ViewGroup用于控制布局,着重在于layoutmeasuretouch event
  3. View负责自身的显示
  4. ViewGroup着重children如何在ViewGroup中显示

下面是ViewViewGroup的树形结构

View树结构

Android坐标系

Android的坐标系和我们数学上的坐标系有出入。

Android坐标系以屏幕左上角为起点,向右为X轴增大方向,向下为Y轴增大方向。如下图:

Android坐标系

ViewViewGroup上的坐标,则是由topbottomleftright决定。如下图,ABCD四个点的坐标分别是(left, top)(right, top)(right, bottom)(left, bottom)注意,是相对于其parent的坐标,并不是相对于屏幕左上角的坐标。在View显示在屏幕上之后,可以通过对应的get方法获得值。

View坐标

Android角度

回顾一下角度与弧度的概念:

角度与弧度

Android坐标系中,顺时针为角度增大方向。如下图

屏幕坐标系角度增大方向

总结

这是View必须了解的一些基础知识,在后面的使用中一定会用到。

参考文章

自定义View基础 - 最易懂的自定义View原理系列(1)

Android自定义View之时钟


   转载规则


《一、View基础知识》 Mycroft Wong 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
二、View测量 二、View测量
View测量前言自定义View实际上是Android给我们定下了一些规则,我们需要遵循这些规则去定义一个View,符合这个规则的View才会更好的显示。实际上,它并没有如Java的强类型般的限制我们怎么做,我们在使用中可能时长在破坏这些规则
2019-08-24
下一篇 
自定义View系列 自定义View系列
自定义View系列前言自定义View,这是一个我曾经尝试逃避的问题,但是作为Android开发,想要走得更远,那么永远也逃避不了。前两天在面试中遇到了这个问题,并没有回答得很好。所以这两天静下心来,明白了不少。 在这一系列文章中,着重理解自
2019-08-24
  目录