自定义View----总结

Android自定义View系列之详解View的绘制流程 一、开场白 开讲之前我们先预设一种自定义ViewGroup的场景:我们知道LinearLayout、FrameLayout、RelativeLayout...都是系统定义实现的布局,我们想要自定义一个FlowLayout流式布局实现我们自己要的效果(自定义不就是按照自己想要的效果实现的一种布局),流式布局目前Google官方还没帮我们提供,但网上有很多自定义的流式布局,也都是开发者们自己继承ViewGroup实现的,今天以自定义ViewGroup实现流式布局FlowLayout为大前提讲解View的绘. 阅读详情

自定义View—-总结

这一段时间写了不少自定义View,总算对自定义View有了一个大体上的理解,根据自己的理解自定义View其实总体分为三类。
1.自绘组件
2.组合组件
3.继承组件

网上的自定义View统称的方式就是那些固定的onMeasure,onDraw……,其实不仅仅如此,自定义View有很多可以利用的地方,通过我自己的体会,我感觉总体分为以上的三种比较合理,分别的实现方式也不同。

1.自绘组件

这算是我们想到自定义组件最先想到的一种,这种自定义View的难点在于几个点:

难点:

1.onMeasure中对于组件的测量,注意绘制的原点,注意MeasureSpec的三种测量模式,注意支持warp_content
2.onDraw中对于组件的绘制,怎么绘制,绘制什么,从哪绘制到哪结束,主要是对于Paint,cancas的掌握和对于View的几个坐标系数的掌握。
3.对于一些数学计算原理的学习,这里面经常要用到三角函数等数学公式,难一点的像贝塞尔曲线。
4.怎么绘制出来想要的东西,比如要想要个人的组件,肯定是先画头,再画身子,再画脚。

使用情景:

Android原生中没有相似的组件存在,经常一些炫酷的组件就是通过这种方式绘制出来的。

实现步骤:

1.在style文件中定义相关的属性(此项不是必须)
2.在构造函数函数中通过TypedArray获得刚才定义的属性,注意回收(也不是必须,这个只有上面定义了才做)
3.重写onMeasure,区分三种MeasureSpec测量模式(也不是必须,如果你这个自定义View这是画画玩)
4.重写onDraw方法,利用canvas和paint按照思路绘制

参考实例:

仪表盘圆形进度条
自定义评分条

2.组合组件

这应该算是自定义组件中最简单的一种了,其实就是将常用的一个layout封装成一个View,方便复用。

难点:

1.接口回调,理解接口回调的方式
2.高内聚,低耦合,主要是组件的复用,不要让View和业务逻辑掺杂在一起。

使用场景:

主要是用于组件复用,比如经常写TitleLayout,完全可以封装成一个CommonTitle组件,不用每次都写进去一大堆重复的代码。

实现步骤:

1.在style文件中定义相关的属性(此项不是必须)
2.在构造函数函数中通过TypedArray获得刚才定义的属性,注意回收(也不是必须,这个只有上面定义了才做)
3.通过LayoutInflater加载xml文件或者通过addView的方式动态的添加组件。
4.封装相应的对外方法,对外接口。

参考实例:

ToTopView
CommonTitle

3.继承组件

这个是通过继承Android原生的已有的组件,通过改变和添加一些方法来说实现我们想要的效果。

难点:

1.对于所继承的组件的理解,要改变一个组件,肯定要理解这个组件的实现方式。
2.对View的生命周期的理解,在这种组件里经常需要用到View的Width和Height,但是经常出现为0的情况,这多数是以为此时View还没有执行onLayout方法,所以为0,要理解View的生命周期和Activity的生命周期的关系。
3.对组件源码的阅读,主要是理解组件的方法的用处。

使用场景:

对于一些和原生的组件很相近,但是又和自己的需求差一点的情况,这时就需要重写这个组件,根据自己的需求进行改写。

实现步骤:

1.extends * 继承相应组件
2.根据需求重写对应的方法。

参考实例:

竖向Viewpager(3D翻动效果画廊)
AutoFitTextView-根据文本内容自动调整字体大小的TextView

总结:

以上就是我现在对于自定义View的理解,我经过对自定义View在尝试过以上三种实现方式后,给我的感觉总的来说
难点:
1.如何实现?也就是idea,你拿到一个效果,要仔细分析这个效果的实现过程,将过程转变为可以用代码实现的过程,当完成这一步后,自定义View已经实现了一半,接下来就是将这个过程用代码码出来。
进阶:
1.如何封装?这个就联系到设计模式和设计思想了,可以多看看别人开源效果的源码(经典的,封装很好的),多看看Android原生的组件的源码(为什么一个TextView可以有1w+的代码,为什么要使用ListView+adapter,为什么要用Builder,为什么会有Helper等等等等),考虑到上面的问题后,就考虑考虑自己写的组件别人是否可以拿去直接用,自己的组件是否可以用adapter模式,builder模式等
2.考虑把自己的View发布出去吧!JitPack,

Android自定义View-View的绘制流程 View的绘制基本由measure()、layout()、draw()这三个函数完成 函 数 作 用 相 关 方 法 measure() 测量View的宽高 measure(),setMeasuredDimension(),onMeasure() layout() 计算当前View以及子View的位置 layout(),onLayout(),setFrame() draw() 视图的绘制 draw(),onDraw() 一、Measure 阅读详情

相关推荐

自定义View笔记

布局: onLayout onMeausure / Layout:viewGroup显示: onDraw :view: canvas paint matrix clip rect animation path(贝塞尔) line text绘制交互: onTouchEvent :组合的viewGroup。

DonnyCoy 884

idea 自定义视图

效果: 设置:!file:.iml&&!file:.idea//&&!file:.settings//*&&!file:.classpath&&!file:.project 转载于:https://www.cnblogs.com/Mike_Chang/p/9461870.html...

atu99602的博客 761

人形机器人硬件开发:骨架系统设计全攻略

本文以人形机器人骨架系统为核心研究对象,系统解析其从理论建模到工程实现的全流程设计方法。通过融合刚体力学、材料科学与机器人控制理论,构建"概念基础-理论框架-架构设计-实现机制-实际应用-高级考量-综合拓展"的七层分析体系。重点覆盖运动学/动力学建模、轻量化结构设计、关节模块集成、多物理场耦合优化等关键技术,结合波士顿动力Atlas、本田ASIMO等经典案例,提供从原型设计到量产验证的工程实践指南。

AI天才研究院 1878

Intellij IDEA使用技巧整理

代码自动补全(live templates)IDEA中代码自动补全在IDEA中通过”快捷键+TAB”实现代码自动补全。 比如System.out.println(“”);,在IDEA中可以sout + TAB实现。 常用代码自动补全快捷键 快捷键 说明 sout System.out.println(“”); psvm main方法 编写自己的live templates1

4万+

NRF52832串口通信避坑指南:从SDK配置到硬件流控(RTS/CTS)实战

本文详细介绍了NRF52832串口通信的实战指南,从SDK配置到硬件流控(RTS/CTS)的完整实现。通过分析UARTE模块特性、解决SDK版本差异问题、正确配置硬件引脚以及实现稳定通信的代码示例,帮助开发者避开常见陷阱,确保高效可靠的串口通信。特别强调了硬件流控在高速通信中的重要性及其实践方法。

weixin_33739646的博客 283

YOLOv5改进——添加SimAM注意力机制

这样可以使注意力机制看到整个backbone部分的特征图,将具有全局视野,类似于一个小的transformer结构。注意:很多改进教程都是将代码直接复制到common.py文件,如果改进机制多了容易造成混乱。在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为simam.py。在models文件夹下,复制yolov5s.yaml文件,粘贴并重命名为yolov5s-simam.yaml。运行yolo.py,出现刚刚加入的SimAM注意力机制,说明加入成功。

2302_80099075的博客 1653

Android自定义View

概述 Android开发进阶的必经之路 为什么要自定义View 自定义View的基本方法 自定义View的最基本的三个方法分别是: onMeasure()、onLayout()、onDraw(); View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。 测量:onMeasure()决定View的大小; 布局:onLayout()决定View在ViewGroup中的位置; 绘制:onDraw()决定绘制这个View。 自定义控

Rayman的博客 1万+

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1363

Android自定义view原理及自定义View示例

自定义View一共分为6步第一步public SpreadView(Context context) { super(context); } public SpreadView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public SpreadView(Context c...

haoxuhong的博客 3532

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 416

Rsoft仿真实战:长周期光纤光栅参数优化与模式耦合分析

本文详细介绍了使用Rsoft软件进行长周期光纤光栅(LPFG)参数优化与模式耦合分析的实战方法。通过Rsoft仿真,可以高效优化光栅周期、包层厚度等关键参数,深入分析纤芯模与包层模的耦合特性,为光纤通信和传感应用提供可靠的设计依据。

h0i1j2k3l的博客 1115

Android自定义View的四种方式

一 前言 在Android开发中有很多业务场景,原生的控件是无法满足应用,并且经常也会遇到一个UI在多处重复使用情况,那么就需要通过自定义View的方式来实现这些UI效果。作为一个Android开发工程师自定义View属于一个必备技能。 像前几天正好做了一个上传本地图片的网格UI,点击相机的icon就可以上传选择本地图片,选中图片之后就可以显示的界面上。本来可以使用Android原生GridView,但是这个控件由于嵌套到ScrollView中,所以导致滑动事件冲突,当然网上...

nihaomabmt的专栏 9970

Linux下科大讯飞离线语音识别SDK从下载到实战(附常见问题解决)

本文详细介绍了在Linux系统下,如何从科大讯飞开放平台获取离线语音识别SDK,完成环境准备、编译部署到实战开发的完整流程。文章重点解析了SDK目录结构、语法词典定制、示例代码修改,并针对开发中常见的“词典加载失败”、音频格式、交叉编译及性能优化等问题提供了深度解决方案,助力嵌入式与IoT开发者快速实现稳定可靠的离线命令识别功能。

honey的博客 1241

Android自定义View详解,自定义View的实现方法

在Android中,所有的用户界面都是通过View来实现的,它是Android UI框架的核心组件。自定义View是在已有的View的基础上进行扩展和定制,所以在实现自定义View之前,我们首先需要了解View的基本知识。另一种方式是直接创建自定义View类,这样可以更加灵活地控制View的行为和样式。通过自定义View类,可以实现各种独特的用户界面效果和交互方式,比如自定义进度条、翻页效果、拖拽控件等。@Override。

m0_46368082的博客 2217

康复训练监测系统:基于YOLOv8的患者动作规范识别

本文系统介绍了基于YOLOv8的康复训练动作规范识别系统,从理论背景、数据准备、模型训练、推理应用到UI界面,提供了完整技术链条及代码示范。希望对康复领域的智能监测应用提供参考和借鉴。

YOLO 453

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android 自定义属性,自定义控件、自定义View以及View的常见Error

Android 自定义属性,自定义控件、自定义View 自定义属性 1 要使用 系统的属性 可以使用所继承的控件的属性 如继承的TextView 或者 View 则相关的属性都可以不用声明直接使用 2 否则 要styleable中定义 <attr name="android:text" /&a

5ingwings(SiHao)的博客 8410

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android自定义View以及View的绘制流程

Android自定义View以及View的绘制流程 View类代表用户界面组件的基本构建块;View在屏幕上占据一个矩形区域,并负责绘制和事件处理;View是用于创建交互式用户界面组件(按钮、文本等)的基础类。 ViewGroup是View的子类,是所有布局的父类,是一个可以包含其他View或者ViewGroup并定义它们的布局属性一个看不见的容器。 实现一个自定义View,通常会覆写一些Fram...

weixin_41729259的博客 3404

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android自定义view

在Android开发中有很多业务场景,原生的控件是无法满足应用,并且经常也会遇到一个UI在多处 重复使用情况,那么就需要通过自定义View的方式来实现这些UI效果。作为一个Android开发工程师自定义View属于一个必备技能。自定义View的实现方式有以下几种: 组合控件,继承控件,自绘控件详细可分为:自定义组合控件,继承系统View控件,继承系统ViewGroup,自绘View控件,自绘ViewGroup控件组合控件就是将多个控件组合成一个新的控件,可以重复使用。...

shuo277的博客 1万+

浅谈Android自定义View

当我们开发中遇到原生的组件无法满足需求时,我们这时候就应该写自定义View来满足一些特殊的组件需求。 自定义View 个人总结自定义View的概念分为两种: 1、在同一个样式的控件组合多处要使用到,我们可以采用原生控件组合一个View供其他地方调用,减少重复代码。 举个栗子:最常见的空白提示页面,一般都是上面是图标下面是文字就可以考虑以上方式。下面直接上代码: /** *我们这里因为

比较喜欢、笑的博客专栏 7718

View与自定义View

View类是Android中各种组件的基类(如View是ViewGroup基类)。View表现为显示在屏幕上的各种视图,Android中的UI组件都由View、ViewGroup组成。它定义了所有UI组件共有的特性和行为(绘制、事件处理、状态变化……)。自定义View在没有现成的View,需要自己实现的时候,就使用自定义View。一般继承自View,SurfaceView或其他的View。自定义View主要是实现。自定义ViewGroup。

m0_60610120的博客 1201

android自定义View全解

源码在这里:优快云本文主要有以下内容: * 自定义View的分类 * 自定义View的注意事项 * 自定义View的实现 * 自定义View使其支持wrap_content和padding * 自定义属性的实现过程首先,自定义View是为了达到更绚丽的效果。它相对来说也是一个比较难的技术体系,涉及到【View的层次结构】、【View事件分发机制】、【View的工作原理】、【View的弹性

jasonpeak的专栏 5586

《Android 自定义View的详解》

自定义View:只需要重写onMeasure()和onDraw()自定义ViewGroup:只需要重写onMeasure()和onLayout():用于测量View的大小(宽度和高度)。:确定View在ViewGroup中的位置;:用于绘制View的内容。,在里面写上你的触摸反馈算法,并返回 true(关键是 ACTION_DOWN 事件时返回 true)。如果是会发生触摸冲突的 ViewGroup,还需要重写。

weijiangbc0的博客 1401

Android自定义View-入门(明白自定义View和自定义ViewGroup)

自定义View 为什么要自定义View? 主要是Andorid系统内置的View 无法实现我们的 需求,我们需要针对我们的业务需求定制我们想要的 View.自定义View 我们大部分时候只需重写两个函数: onMeasure(),onDraw(). onMeasure()负责对当前View 的尺寸进行测量,onDraw负责把当前这个View绘制出来,当然了,还需要写构造函数。 public Vi...

petterp的博客 3615

Android自定义View详解

一、自定义View基础 1、分类 自定义View的实现方式有以下几种: 自定义组合控件: 多个控件组合成为一个新的控件,方便多处复用 继承系统View控件: 继承自TextView等系统控件,在系统控件的基础功能上进行扩展 继承View: 不复用系统控件逻辑,继承View进行功能定义 继承系统ViewGroup: 继承自LinearLayout等系统控件,在系统控件的基础功能上进行扩展 继承V...

恬静释然的博客 1013
上一篇: AutoFitTextView-根据文本内容自动调整字体大小的TextView
下一篇: 自定义评分条(方式一)-CustomRatingBar
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值