【Android -- 学习笔记】自定义控件_android 自定义个控件-程序员宅基地

技术标签: 自定义 View  android  Android -- 学习笔记  

在这里插入图片描述
自定义控件的步骤:
1、了解View的工作原理
2、 编写继承自View的子类
3、 为自定义View类增加属性
4、 绘制控件
5、 响应用户消息
6 、自定义回调函数

一、View 结构原理

Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承扩展为视图容器类。

View定义了绘图的基本操作

基本操作由三个函数完成:measure()、layout()、draw(),其内部又分别包含了onMeasure()、onLayout()、onDraw()三个子方法。具体操作如下:
1、measure操作
measure操作主要用于计算视图的大小,即视图的宽度和长度。在view中定义为final类型,要求子类不能修改。measure()函数中又会调用下面的函数:
(1)onMeasure(),视图大小的将在这里最终确定,也就是说measure只是对onMeasure的一个包装,子类可以覆写onMeasure()方法实现自己的计算视图大小的方式,并通过setMeasuredDimension(width, height)保存计算结果。

2、layout操作
layout操作用于设置视图在屏幕中显示的位置。在view中定义为final类型,要求子类不能修改。layout()函数中有两个基本操作:
(1)setFrame(l,t,r,b),l,t,r,b即子视图在父视图中的具体位置,该函数用于将这些参数保存起来;
(2)onLayout(),在View中这个函数什么都不会做,提供该函数主要是为viewGroup类型布局子视图用的;

3、draw操作
draw操作利用前两部得到的参数,将视图显示在屏幕上,到这里也就完成了整个的视图绘制工作。子类也不应该修改该方法,因为其内部定义了绘图的基本操作:
(1)绘制背景;
(2)如果要视图显示渐变框,这里会做一些准备工作;
(3)绘制视图本身,即调用onDraw()函数。在view中onDraw()是个空函数,也就是说具体的视图都要覆写该函数来实现自己的显示(比如TextView在这里实现了绘制文字的过程)。而对于ViewGroup则不需要实现该函数,因为作为容器是“没有内容“的,其包含了多个子view,而子View已经实现了自己的绘制方法,因此只需要告诉子view绘制自己就可以了,也就是下面的dispatchDraw()方法;
(4)绘制子视图,即dispatchDraw()函数。在view中这是个空函数,具体的视图不需要实现该方法,它是专门为容器类准备的,也就是容器类必须实现该方法;
(5)如果需要(应用程序调用了setVerticalFadingEdge或者setHorizontalFadingEdge),开始绘制渐变框;
(6)绘制滚动条;
从上面可以看出自定义View需要最少覆写onMeasure()和onDraw()两个方法。

二、View 类的构造方法

创建自定义控件的3种主要实现方式:
1)继承已有的控件来实现自定义控件: 主要是当要实现的控件和已有的控件在很多方面比较类似, 通过对已有控件的扩展来满足要求。
2)通过继承一个布局文件实现自定义控件,一般来说做组合控件时可以通过这个方式来实现。
注意此时不用onDraw方法,在构造广告中通过inflater加载自定义控件的布局文件,再addView(view),自定义控件的图形界面就加载进来了。
3)通过继承view类来实现自定义控件,使用GDI绘制出组件界面,一般无法通过上述两种方式来实现时用该方式。

  • View(Context context)
    Simple constructor to use when creating a view from code.

  • View(Context context, AttributeSet attrs)
    Constructor that is called when inflating a view from XML.

  • View(Context context, AttributeSet attrs, int defStyle)
    Perform inflation from XML and apply a class-specific base style.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/duoduo_11011/article/details/124769526

智能推荐

先来先服务、高优先权、按时间片轮转调度算法(含清晰流程图)_先来先服务算法流程图-程序员宅基地

文章浏览阅读2.6w次,点赞41次,收藏307次。操作系统实验三实验报告 课程名称 计算机操作系统 实验名称 进程调度 实验类型 验证 设计 综合 创新 【实验目的】 实验目的: (1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调..._先来先服务算法流程图

ebay实时商品数据采集——ebay必备选品商品详情API数据采集上传接口-程序员宅基地

文章浏览阅读850次,点赞5次,收藏3次。总的来说,通过以上步骤,您可以有效地利用eBay提供的商品详情API接口进行商品数据的采集和上传,从而为您的电商业务提供数据支持。在使用过程中,不断学习和实践是非常重要的,因为数据是电商业务成功的关键。

从零开始复刻ruoyi-vue-pro(若依Pro版)_若依站内信-程序员宅基地

文章浏览阅读622次,点赞3次,收藏9次。从零开始复刻ruoyi-vue-pro(若依Pro版)_若依站内信

Spring装配bean_可以在包中创建一个用来扫描的空标记接口-程序员宅基地

文章浏览阅读401次。创建应用之间关联关系的传统做法(通过构造器或者查找)通常会导致结构复杂的代码 , 这些代码很难被复用 , 也很难进行单元测试 , 耦合度高…… 在spring中 , 对象无需自己查找或创建与其关联的对象 , 相反 , 容器负责把需要相互协作的对象引用赋予给各个对象 ,例如,一个订单管理组件需要信用卡认证组件,但它不需要自己创建信用卡认证组件。订单管理组件只需要表明自己两手空空,容器就会主动赋予它一_可以在包中创建一个用来扫描的空标记接口

openssl3.2 - 官方demo学习 - mac - cmac-aes256.c_openssl生成cmac-程序员宅基地

文章浏览阅读511次,点赞5次,收藏5次。指定加密算法(e.g. AES-256-CBC), 对明文生成MAC数据。_openssl生成cmac

C语言学习(十)C语言中的小数_c语言小数的定义变量类型-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏18次。C语言学习(十)C语言中的小数小数的表示方式小数分为整数部分和小数部分,他们之间用点号.分隔,如0.0、7.5、4.098、0.27、-987.333等都是合法小数,这是最常见的小数形式,我们称为十进制形式。此外,小时也可以采用指数形式,如3.2x103、0.0345x106、100.2323x10-6等。C语言同时支持以上两种小数形式。C语言中小数的指数形式为:aEn 或 aen其中a为尾数部分,是一个十进制的数字。n为指数部分,是一个十进制整数。e或者E是一个固定字符,用于分隔尾数和指数_c语言小数的定义变量类型

随便推点

Flutter 仿掘金微信图片滑动退出页面效果_flutter photo_view 滑动关闭-程序员宅基地

文章浏览阅读946次。1.增加onSlidingPage回调,可以在滑动页面的时候设置页面上面的其他元素的状态2.增加中文文档这个需求在做extended_image的时候就有上帝客户提过了,一直都没有时间去考虑实现。最近思考了一下,把效果给实现了。首先开启滑动退出页面效果ExtendedImageparameter description default enableSlide..._flutter photo_view 滑动关闭

SAP MM供应商主数据表-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏13次。_主数据表

使用什么框架来开发H5应用?_h5开发框架-程序员宅基地

文章浏览阅读401次。React还支持丰富的生态系统,包括Redux等状态管理库和React Native等移动应用开发框架,可以帮助开发人员更好地构建跨平台的H5应用。Vue.js具有响应式的数据绑定和组件化的架构,可以帮助开发人员更好地管理应用状态和UI组件,同时也提供了丰富的插件和扩展库,使得开发H5应用变得更加便捷。选择适当的框架可以极大地简化H5应用的开发过程,并提供丰富的功能和良好的用户体验。选择适合的框架可以大大简化H5应用的开发过程,并提供丰富的功能和良好的用户体验。以上是几种常用的框架,可以用于开发H5应用。_h5开发框架

拯救者Legion R9000X 2021(82HN)原装出厂Win10系统镜像ISO下载_联想拯救者win10下载-程序员宅基地

文章浏览阅读223次。原装出厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序。lenovo联想拯救者笔记本R9000X 2021款原厂Windows10系统安装包,恢复出厂开箱状态预装OEM系统。注:恢复时会清空电脑上所有盘的数据,请提前转移备份好重要资料!文件格式:ISO 文件大小:10.94GB。所需要工具:16G或以上的U盘。_联想拯救者win10下载

【金三银四】面试题汇总(持续编写中)(1),大数据开发面试题2024答案-程序员宅基地

文章浏览阅读509次,点赞10次,收藏14次。(img-wFn67B7m-1713167233059)]友,可以添加V获取:vip204888 (备注大数据)**

arm-none-eabi交叉编译工具常用的一些指令_arm-none-eabi-gcc objdump-程序员宅基地

文章浏览阅读1.7w次,点赞3次,收藏22次。假如目前有三个文件a.c、b.c、ab.lds:1.arm-none-eabi-gccarm-none-eabi-gcc --help 查看帮助信息。arm-none-eabi-gcc -c a.c 生成a.o文件。arm-none-eabi-gcc -g -c a.c 生成a.o文件,-g使得如果反汇编可对应C语言显示。arm-none-eabi-gcc -c_arm-none-eabi-gcc objdump