自定义View系列(一)

一、

首先我们要明白为什么要自定义View,主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。自定义View的价值在于:

1、能够做到基础控件无法做到的效果,为应用的表现增色;

2、在多个应用并行开发的团队,将公用的交互效果提取成自定义控件,方便复用,减少不必要的重复劳动;

3、将控件的内部逻辑封装在自定义View中,便于应用内解耦。

二、

自定义的View的实现有三种方式:继承已有控件(比如ImageView、EditText);完全自定义控件;组合控件。

三、

在这里,我们先来温故下关于View的基础知识。

1、View的分类。View分为两类:单一视图和视图组。

类别 解释 特点
单一视图 即一个View,如TextView 没有子View
视图组 即多个View组成的ViewGroup,如LinearLayout、RelativeLayout、FrameLayout 包含子View

2、View的构造方法。View一共有四个构造方法,如下:

//如果View是在Java代码里new的,则调用第一个构造方法

View(Context context)

//如果View是在.xml里声明的,则调用第二个构造方法。自定义属性是通过AttributeSet 参数传递进来的。

View(Context context, AttributeSet attrs)

//不会自动调用

View(Context context, AttributeSet attrs, int defStyleAttr)

//API21之后才使用。不会自动调用。

View(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

3、View视图结构。

对于多View的视图,结构是树形结构,最顶层是ViewGroup,ViewGroup下可能有多个ViewGroup或View。

切记:无论是measure过程、layout过程还是draw过程,永远都是从树的根节点开始测量或计算(即从树的顶端开始),一层一层,一个分支一个分支地进行(即树形递归),最终计算整个View树中各个View,最终确定整个View树的相关属性。

4、Android坐标系。

Android坐标系定义为:

  • 屏幕的左上角为坐标原点
  • 向右为x轴增大方向
  • 向下为y轴增大方向

如下图

5、View位置(坐标)描述。

View的位置由四个顶点决定(如下A、B、C、D)

4个顶点的位置描述分别由4个值决定(注意:View的位置是相对于父控件而言的):

  • Top:子View上边界到父view上边界的距离
  • Left:子View左边界到父view左边界的距离
  • Bottom:子View下边距到父View上边界的距离
  • Right:子View右边界到父view左边界的距离

如下图:

四、自定义View涉及到的核心方法。

1、onMeasure  用于测量视图的大小

2、onDraw  用于对视图进行绘制

3、onLayout  用于给视图进行布局

本文就到这里,后续的系列文章将结合实例继续讲解自定义View。

猜你喜欢

转载自blog.csdn.net/zdj_Develop/article/details/81353516