Android 自定义View(上)

为什么要自定义View

虽然Android提供的很多控件都可以用来跟用户展示、进行交互,但是有时候我们为了追求更好的效果,仍然需要自己去自定义View

自定义View的基本方法

自定义View的最基本的三个方法分别是: onMeasure()、onLayout()、onDraw(); View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。

  • 测量:onMeasure()决定View的大小;
  • 布局:onLayout()决定View在ViewGroup中的位置;
  • 绘制:onDraw()决定绘制这个View。

自定义控件分类

  • 自定义View: 只需要重写onMeasure()和onDraw()
  • 自定义ViewGroup: 则只需要重写onMeasure()和onLayout()

自定义View基础

View的分类

视图View主要分为两类

  • 单一视图 即一个View,如TextView 不包含子View
  • 视图组 即多个View组成的ViewGroup,如LinearLayout 包含子View

View类简介

  • View类是Android中各种组件的基类,如View是ViewGroup基类

  • View表现为显示在屏幕上的各种视图

    Android中的UI组件都由View、ViewGroup组成。

  • View的构造函数:共有4个
    在这里插入图片描述
    在这里插入图片描述

AttributeSet与自定义属性

系统自带的View可以在xml中配置属性,对于写的好的自定义View同样可以在xml中配置属性,为了使自定义的
View的属性可以在xml中配置,需要以下4个步骤:
1.通过 为自定义View添加属性
2.在xml中为相应的属性声明属性值
3.在运行时(一般为构造函数)获取属性值
4.将获取到的属性值应用到View

View视图结构

1.PhoneWindow是Android系统中最基本的窗口系统,继承自Windows类,负责管理界面显示以及事件响应。它 是Activity与View系统交互的接口
2.DecorView是PhoneWindow中的起始节点View,继承于View类,作为整个视图容器来使用。用于设置窗口属性。它本质上是一个FrameLayout
3.ViewRoot在Activtiy启动时创建,负责管理、布局、渲染窗口UI等等
在这里插入图片描述

对于多View的视图,结构是树形结构:最顶层是ViewGroup,ViewGroup下可能有多个ViewGroup或View,如下图:
在这里插入图片描述
一定要记住:无论是measure过程、layout过程还是draw过程,永远都是从View树的根节点开始测量或计算(即从 树的顶端开始),一层一层、一个分支一个分支地进行(即树形递归),最终计算整个View树中各个View,最终确定整个View树的相关属性。

Android坐标系

Android的坐标系定义为:

  • 屏幕的左上角为坐标原点
  • 向右为x轴增大方向
  • 向下为y轴增大方向
    在这里插入图片描述
    区别于一般的数学坐标系
    在这里插入图片描述

View位置(坐标)描述

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

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

位置获取方式

View的位置是通过view.getxxx()函数进行获取:(以Top为例)在这里插入图片描述
与MotionEvent中 get()和getRaw()的区别在这里插入图片描述在这里插入图片描述

Android中颜色相关内容

Android支持的颜色模式:

在这里插入图片描述
介绍颜色定义:
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gujunhe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值