安卓自定义View - 基础

Android自定义View系列之理论基础知识 一、坐标系(屏幕坐标系和布局坐标系) 在Android坐标系中,以屏幕左上角作为原点,这个原点向右是X轴的正轴,向下是Y轴正轴,所以开发中调用方法的时候就有了以屏幕上边和左边为参考值,有了参考值你才好定位呀。 除了上面说的Android坐标系,到了View布局的时候有布局坐标系(也称View坐标系,但这种坐标系是相对的,因为Android中的View/ViewGroup是嵌套存在),布局坐标的关系如下图 上图中最里层是一个View(如TextView/Button/ImageView.... 阅读详情


前言

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


提示:以下是本篇文章正文内容,下面案例可供参考

一、onMeasure (测量)

认识MeasureSpec(测量规则):

MeasureSpec是一个32位的int值,前2位是SpecMode,表示测量模式,后30位是SpecSize,表示在某种测量模式下的规格大小。

View类中有下面三个方法:
public static int getMode(int measureSpec) 测量模式(可取以下三种测量模式)
public static int getSize(int measureSpec) 测量的大小(具体值)
public static int makeMeasureSpec( int size, int mode) 提供一个标准的大小值和模式的 MeasureSpec

三种测量模式:

  1. UNSPECIFIED (不确定)
    任意大小,想要多大就多大,尽可能大,一般我们不会遇到,这种情况一般用于系统内部,如ListView,RecyclerView,ScrollView测量子View的时候给的就是UNSPECIFIED 我们在开发过程中基本用不到。
  2. EXACTLY (精确的)
    父容器已经检测出View所需要的精确大小,这个时候View的最终大小就是SpecSize所指定的值。如:layout_width=“100dp”,“match_parent”,“fill_parent”。
  3. AT_MOST (至多)
    父容器指定了一个可用大小即SpecSize,View的大小不能大于这个值,包裹内容,比如在布局中你是这样写的layout_width=“wrap_content”。

二、onLayout (布局)

代码如下(示例):

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {}

源码注释:
从布局调用时,该视图应该为每个子元素分配一个大小和位置。派生类的子类应该重写这个方法和调用layout在每个自己的孩子。
changed 这是这个视图的新尺寸或位置
left 相对于父节点的左侧位置
top 相对于父节点的顶部位置
right 相对于父节点的右侧位置
bottom 相对于父节点的底部位置

view 的 layout 方法确定了 view 的4个点的位置,注意这4个参数是对应 view 坐标系的 left ,top ,right ,bottom 4个值,在我们自己需要使用这个方法时,应该知道4个坐标值表示什么,怎么算
最后我们要知道父控件会计算出子 view 的位置坐标,然后统一遍历所有的子 view ,执行他们的 layout 方法已决定他们的位置。

用下面的坐标图可以更直观的理解:

在这里插入图片描述

对于多View的视图他的结构是树形结构,最顶层是ViewGroup,ViewGroup下可能有多个ViewGroup或View。
这个树的概念很重要,因为无论我们是在测量大小或是调整布局的时候都是从树的顶端开始一层一层,一个分支一个分支的进行(树形递归)。

在这里插入图片描述
Layout的作用就是为整个View树计算实际的位置,而通过刚才对View树的介绍知道,想计算整个View树的位置,就需要递归的去计算每一个子视图的位置(Measure同理)。

三、onDraw (绘制)

代码如下(示例):

protected void onDraw(Canvas canvas) {}

canvas 将在其上绘制背景的画布
如以下方法:
canvas.drawLine() 画直线
canvas.drawCircle() 画圆
canvas.drawPath() 画路径
canvas.drawRect() 画正方形
等…


总结

以上就是自定义view的基础内容,本文仅仅简单介绍了自定义view的执行流程,仅供参考,如有错误,不吝赐教。

参考:
https://www.jianshu.com/p/653a86fe450f
https://blog.youkuaiyun.com/zenmela2011/article/details/109744695
http://events.jianshu.io/p/d77e60478b27

Android:你要了解的自定义View基础概念都在这里了! 前言: 现组建了一个Android的水友圈,进群可免费领取Android的高级UI及跨平台技术,还有jvm性能优化,APP小程序源码等资料;有从初始Android到Android进阶视频学习,包括Android开源实战,文末有进圈方式。 View基础概念 1. 视图(View) 定义 视图(View)表现为显示在屏幕上的各种视图,如TextView、LinearLayout等。 2. 视图(View) 分类 View主要分为两类: a. 单一视图(View):即一个View,如TextView, 阅读详情

相关推荐

威联通改装飞牛fnOS全攻略:从刷机到Docker影视部署

NAS系统是家庭数字存储的核心,x86架构的威联通设备凭借通用引导和驱动支持,成为改装替代系统的理想平台。飞牛fnOS作为基于Debian的国产NAS系统,以简洁UI、内置Docker和影视墙以及硬件转码能力,吸引了大量玩家。通过U盘引导安装、BIOS调整、系统盘SSD部署,可实现系统切换;原机械硬盘可挂载为存储池,配合Docker部署下载、远程访问等容器,影视中心自动削刮海报墙,硬件转码保障4K播放。改装过程需注意引导失败、硬盘识别、核显驱动等问题。这套方案能让老旧威联通焕发新生,兼顾易用性与扩展性。本文

weixin_33585822的博客 756

安卓自定义View

安卓自定义View

eos-i的博客 5250

车载与安防项目实战:如何用RK3588搭配NVP6158C实现4路AHD摄像头BT1120接入与同步预览

本文详细解析了基于RK3588处理器与NVP6158C解码芯片实现4路AHD摄像头BT1120接入与同步预览的技术方案。针对车载环视和安防监控场景,重点探讨了硬件架构设计、BT1120接口配置、多路同步机制及Android HAL适配等核心问题,提供了从底层驱动到上层应用的完整实现路径,为相关领域的工程实践提供可靠参考。

weixin_30571465的博客 484

Android --- 自定义View的三种实现方式及自定义属性使用介绍

我们在使用Android原生控件的时候,经常可以看到在布局文件中可以设置很多的属性值,如

梁同学与Android 2672

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 839

若依(RuoYi)项目里,Quartz定时任务踩坑实录:并发控制、事务回滚与异常处理

本文深入解析若依(RuoYi)项目中Quartz定时任务的并发控制、事务回滚与异常处理三大核心问题。通过实战案例揭示@DisallowConcurrentExecution注解的局限性和Redis分布式锁的应用,详细讲解Spring事务集成方案及多数据源事务管理,并提供生产级监控体系搭建指南,帮助开发者规避Quartz在生产环境中的常见陷阱。

weixin_28731223的博客 408

深入理解Android之自定义View

自定义View、多线程、网络,被认为是Android开发者必须牢固掌握的最基础的三大基本功。而自定义View又是Android开发中特别重要的一环,很多地方都需要用到自定义View。这篇文章我就梳理一下自定义View的相关知识。 目录 (一)什么是自定义View (二)自定义组合View (三)自定义View的绘制 1. Canvas.drawXXX() Pa...

Fighting_初心的博客 1万+

如何借助GPT- 6 写好一篇论文:从引言到参考文献完整步骤(附专业提示词)

七哥就结合这篇文章的写作思路,依次拆解引言、方法、结果、讨论、摘要、标题和参考文献分别应该怎么写,同时也聊聊,在每一个环节里,我们可以怎样合理借助 GPT-6,让论文写作变得更清晰、更高效。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。8、不修改、不补写、不猜测任何样本量、阈值、剂量、设备型号、参数或统计方法,所有缺失但影响方法完整性的信息统一标记为【待作者确认】、检查方法中设定的每一个分析项目能否在后续结果章节找到对应位置。

智能AI让学术科研更容易 109

自定义View的三种实现方式及自定义属性使用介绍

这里写目录标题一 前言二 三种自定义控件的方法2.1 组合控件2.2 继承控件2.2.1 继承View类系统控件2.2.2 继承ViewGroup类系统控件2.3 自绘控件2.3.1 自绘叶子View控件2.3.2 自绘ViewGroup控件三 在自定义View中使用自定义属性四 自定义属性格式汇总 一 前言 尽管Android系统提供了不少控件,但是有很多酷炫效果仍然是系统原生控件无法实现的。好在Android允许自定义控件,来弥补原生控件的不足。但是在很多初学者看来,自定义View似乎很难掌握。其中

qq_39431405的博客 4078

XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解

详细介绍如何使用Vehicle Spy进行XCP测量

initiallizer的博客 1391

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 GhostConv

GhostConv助力RT-DETR ,HGBlock与PPHGNetV2 GhostConv完美结合

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2909

安卓Android---自定义view

android的自定义view

Chenbaozeng的博客 2161

YOLOv5改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2222

Android自定义View学习一---基础

Android自定义View学习一 自定义view三点: 布局 绘制 触摸反馈 基础 坐标系 参考: 安卓自定义View基础-坐标系 View的坐标系 注意:View的坐标系统是相对于父控件而言的. getTop(); //获取子View左上角距父View顶部的距离 getLeft(); //获取子View左上角距父View左侧的距离 getBottom(); ...

了凡 1146

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android控件向内弧度_安卓自定义 View 基础:坐标系、角度弧度、颜色

安卓自定义View基础 - 坐标系一.屏幕坐标系和数学坐标系的区别由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:(PS:其中的∠a 是对应的,注意y轴方向!)实际屏幕上的默认坐标系如下:PS: 假设其中棕色部分为手机屏幕二.View的坐标系注意:View的坐标系统是相对于父控件而言的.ge...

weixin_33238848的博客 448

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓自定义View基础-坐标系

介绍的很详细,厉害了 安卓自定义View基础-坐标系

zuochunsheng的博客 301

Android 自定义 View 基础篇

简介 View 和 ViewGroup View:用户界面组件的基本构成,一个 View 在屏幕上占据一个矩形,并负责绘制 UI 和处理事件,常用来创建 UI 组件(Button、TextView、ImageView 等),View 类是安卓所有控件的基类。 ViewGroup:View 类的子类,一种组合 View(RelativeLayout、LinearLayout 等),ViewGroup...

longsh_的博客 358

Android自定义View——绘制基础

本篇接着上一篇的基础知识来说,今天要学点能看的见的东西了————绘制基础。 一、绘制的简要说明 自定义绘制最主要的点就是重写绘制方法,当我们定义一个类去继承自View这个类时,会让你必须重写几个构造方法和onDraw(Canvas canvas)方法,那我们最常用的绘制方法就是这个onDraw方法,参数需要一个Canvas对象,我们绘制的关键就是通过Canvas提供的各个api去进行绘制、裁剪...

江湖人陆仁甲 810

Android自定义View基础篇--坐标系

Android自定义View基础边-坐标系

qq_36639105的博客 1797

安卓自定义View基础-角度与弧度

在我们自定义 View,尤其是制作一些复杂炫酷的效果的时候,实际上是将一些简单的东西通过数学上精密的计算组合到一起形成的效果。 这其中可能会涉及到画布的相关操作 (旋转),以及一些正余弦函数的计算等,这些内容就会用到一些角度、弧度相关的知识。

GcsSloop 9823

android自定义View之零散基础知识

目录 从0到1Android自定义View(一) 零散基础知识.png 一、Android 坐标系 1、Android 屏幕坐标 数学中常见的坐标系与 Android 系统上 View 的坐标系是有点差别的,Android 设备中,屏幕的左上角为坐标原点,向右为 x 轴增大方向,向下为 y 轴增大方向。 Android坐标系与数学坐标系的区别.png 2、View 的坐

luanxuye的博客 394

android控件向内弧度_安卓自定义View基础-角度与弧度

安卓中角度(angle)与弧度(radian)的有关问题。一.前言1.为什么讲这个?在我们自定义View,尤其是制作一些复杂炫酷的效果的时候,实际上是将一些简单的东西通过数学上精密的计算组合到一起形成的效果。这其中可能会涉及到画布的相关操作(旋转),以及一些正余弦函数的计算等,这些内容就会用到一些角度、弧度相关的知识。2.为什么对角的描述存在角度与弧度两种单位?简单来说就是为了方便,为了精确描述一...

weixin_39699163的博客 180

Android自定义view基础详解及开发流程

自定义view应该说是Android开发通往高级开发的必经之路,自定义view也是很多Android开发者不愿意去触碰的知识点,自定义view到底是什么样子今天我就要揭开自定义view的黑暗面纱。个人学习总结认为自定义view大致分为以下几个过程: 1.自定义view单纯的用画笔绘制view(死view) 2.自定义view增加手势 3.自定义view增加动画 4.自定义view手势动画交

王项雨 的博客 1391

安卓自定义View基础篇

首先郑重说明,我是看了GcsSloop这位大神的安卓自定义View基础内容,觉得很有用,自己再写一遍文字,温故一下他所讲的。写的内容,百分之99.9999999都是他的。只有一丢丢我的小总结。 他的文章出处: 安卓自定义View教程目录 第一章: 安卓自定义View基础-坐标系 一.屏幕坐标系和数学坐标系的区别 由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下

lhzjllh的博客 918

android 自定义位置,Android:你要了解的自定义View基础概念都在这里了!

原标题:Android:你要了解的自定义View基础概念都在这里了!本文作者作者:carsonho链接:本文转载自「carsonho」前言自定义View原理是Android开发者必须了解的基础,在了解自定义View之前,你需要有一定的知识储备。本文将全面解析关于自定义View中的所有知识基础。1. 视图(View)定义视图(View)表现为显示在屏幕上的各种视图,如TextView、LinearL...

weixin_30268555的博客 308
上一篇: 记一次Android Studio Profiler使用,找到内存泄露原因
下一篇: 谈谈项目中的内存泄露
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值