自定义View深入了解(一)

通过自定义View了解MeasureSpecMode 一、自定义View的基本步骤 本篇文章的核心知识点,并不是自定义View的全部讲解,主要是通过一个简单的demo了解自定义View的MeasureSpecMode模式。 自定义View基本分为自定义View和自定义ViewGroup。 自定义View的步骤: 继承View重写构造方法(有四个构造方法,不同的使用场景可以了解下) 自定义属性,在构造方法中初始化属性 重写onMeasure方法测量宽高 重写onDraw方法绘制控件 关于View的绘制流程中,三个核心的回调方法onMeasure、onLayo 阅读详情

在 自定义View(基础)以及自定义(加载动画)中,有人肯定会遇到这样的问题:

1.在布局xml中,设置控件layout_width、layout_height 的值为warp_content时,如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <pw.onlyou.testapplication.ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        custom:firstColor="#F08080"
        custom:secondColor="#7B68EE"
        android:background="#aaa"
        android:layout_centerInParent="true"
        android:padding="20dp"
        custom:circleWidth="10dp"
        custom:speed="10"/>
</RelativeLayout>
但是呢,人生道路并不是一帆风顺的,看看运行效果图


are you kidding me??

砸门把布局文件修改一下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <pw.onlyou.testapplication.ProgressBar
        android:layout_width="200dp"
        android:layout_height="200dp"
        custom:firstColor="#F08080"
        custom:secondColor="#7B68EE"
        android:layout_centerInParent="true"
        android:padding="20dp"
        custom:circleWidth="10dp"
        custom:speed="10"/>
</RelativeLayout>
定死宽高,看运行效果:



一切正常,但是我是个有追求的人,绝不放过一丁点问题

通过查阅资料(android 开发艺术探索 是一本好书,建议大家看看),原来如此。先看一张图:


这图啥意思??

1.当 View 采用固定宽高时,不管父容器的 MeasureSpec 是什么,View 的 MeasureSpec 都是精确模式,并且大小是LayoutParams 中的大小。
2.当 View 的宽高是 match_parent 时,如果父容器的模式是精确模式,那么 View 也是精确模式,并且大小是父容器的剩余空间;如果父容器是最大模式,那么 View 也是最大模式,并且大小是不会超过父容器的剩余空间。
3.当 View 的宽高是 wrap_content 时,不管父容器的模式是精确模式还是最大模式,View 的模式总是最大模式,并且大小不超过父容器的剩余空间


缩的思内~我们来修改代码

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int WspecMode = MeasureSpec.getMode(widthMeasureSpec);
        int HspecMode = MeasureSpec.getMode(heightMeasureSpec);

        if(HspecMode==MeasureSpec.EXACTLY&&WspecMode==MeasureSpec.EXACTLY){
            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
        }else if(WspecMode==MeasureSpec.AT_MOST){
            setMeasuredDimension(Width, MeasureSpec.getSize(heightMeasureSpec));
        }else if(HspecMode==MeasureSpec.AT_MOST){
            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), Height);
        }
    }
    

Width和Height 分别是我定义的默认大小,当布局控件 大小为warp_content的时候,控件大小分别为Width、Height。

现在我们布局文件大小都是warp_content,看看运行效果:


good,成功了!

还有padding也是要注意的,有时间补上。

文章目前仍在更新中,如果你觉得我的文章有错误或者纰漏,欢迎指正,另外,如果你觉得有用的话,点个赞呗。

android自定义view之地图(一) 最近参加了一个比赛,要用到自己做一个自定义的小地图,所以在网上查找了一些关于自定义view的有关资料,也了解了自定义控件的初步知识。效果图 第一阶段我画了一个自制的网格图,点哪个网格就会哪个网格就会显示。工作环境图代码介绍1。我们都知道当使用android的原始控件时,每个控件都可以定义属性,比如android:id ,android:layout_width等等大家并不陌生的属性,有些属性是每 阅读详情

相关推荐

01 底盘制动产品之轮速传感器

轮速传感器是用来测量汽车车轮转速的传感器。对于现代汽车而言,轮速信息是必不可少的,汽车动态控制系统(VDC)、汽车电子稳定程序(ESP)、防抱死制动系统(ABS)、自动变速器的控制系统等都需要轮速信息。

汽车软件工程师 | 好奇博主 | 处女座 4656

深入了解View(一、二、三、四)及自定义View

inflate()方法还有个接收三个参数的方法重载,结构如下: [java] view plaincopy inflate(int resource, ViewGroup root, boolean attachToRoot)   那么这第三个参数attachToRoot又是什么意思呢?其实如果你仔细去阅读上面的源码应该可以自己分析出答案,这里我先

Android起跑线 767

SystemRDL:从寄存器描述到自动化生成的完整指南

本文详细介绍了SystemRDL如何通过“一份描述,多处生成”的理念,彻底解决芯片与FPGA设计中手动维护寄存器带来的不一致与低效问题。文章提供了从语言快速上手、核心组件讲解到使用PeakRDL工具链实现自动化代码与文档生成的完整实战指南,帮助硬件工程师构建高效、可靠的寄存器开发流程。

weixin_29243279的博客 658

Android自定义View(一)了解

Android UI 架构图 Android中每一个控件都会占据一个矩形区域,控件大致可以分为View和ViewGroup,ViewGroup控件作为父类控件可以包含多个View。 Android UI界面显示逻辑流程 Activity setContentView—>Window setContentView—>PhoneWindow setContentView—-&...

menglong0329的博客 212

VS Code/TRAE集成Cppcheck并启用MISRA规则

本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。

SDFangFang2025的博客 1282

2025国赛数学建模A题 完整Python代码 烟幕干扰弹的投放策略

常量定义G = 9.8 # 重力加速度 m/s²V_SMOKE_SINK = 3 # 烟幕下沉速度 m/sMISSILE_SPEED = 300 # 导弹速度 m/sEFFECTIVE_RADIUS = 10 # 有效遮蔽半径 mEFFECTIVE_DURATION = 20 # 有效遮蔽时间 sTARGET_POS = np.array([0, 200, 0]) # 目标位置FALSE_TARGET_POS = np.array([0, 0, 0]) # 假目标位置# 初始位置。

YOLO 1106

一图了解View的生命周期,自定义view,invalidate()和requestLayout()调用

Android中View的生命周期,调用invalidate()和requestLayout()会触发哪些方法,一图道破天机。该图确实一看就非常清晰、让人简单的了解View的生命周期,也可以帮助我们更好的去掌握如何自定义view。

工匠荷风的博客 556

基于STM32的汽车主门电动窗开关系统设计方案

以下是基于 STM32CubeMX 和 HAL 库的示例代码,可实现基本的功能。

weixin_42300449的博客 994

[一]了解自定义View ontouch测量方法以及距离

First 图片:红色点为触摸点:View的获取距离方法为:getTop():View顶边到父布局顶边的距离getLeft():View左边到父布局左边的距离getRight():View右边到父布局右边的距离getBottom():View底边到父布局底边的距离OnTouch的获取距离方法:getX():获取触摸点到View左边的距离getY():获取触摸点到View顶边的距离getRawX():

a940659387的博客 946

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1011

Go语言面试:面试中经常被问到的50个经典面试题(附参考答案)

Go语言核心知识点摘要 基础语法与数据结构 make和new区别:new分配零值内存返回指针,make初始化引用类型返回实例 Slice底层:包含指针、长度、容量的结构体,多个slice可共享底层数组 nil与空slice:nil指针为nil,空slice指针非nil但JSON编码不同 Map原理:哈希表实现,非线程安全,扩容策略影响性能 for range注意:循环变量是拷贝,map遍历无序 defer执行:LIFO顺序,函数返回前执行 Struct比较:仅当所有字段可比较时才可比较 参数传递:只有值传递

数据知道的博客 4720

一步一步教你学会自定义View并了解其绘制原理(一)

自定义view的绘制过程,看了很多关于自定义view的帖子、博客,写的也都不错,但我想通过图片+代码+注释的方式写一篇因为图片带给人的记忆效果远比长篇大论的文字好的多,再加上代码的辅助说明,那就更容易的掌握了,废话不多说,撸起袖子,开干!自定义view的种类 继承自View(重写onMeasure、onLayout、onDraw方法) 继承自ViewGroup派生特殊的Layout 集成特定的Vie

z1035075390的博客 2205

每周技巧tc 问题处理技巧Teamcenter

(内部)Dataset和Tool相关之2.1——Tool轮询Contents Type和Type Name-赖良顺.docx。(内部)Dataset和Tool相关之3.2——编写Batch和Perl为客户端自动注册相关内容-赖良顺.docx。(内部)Dataset和Tool相关之1.1——Tools和Datasets参数定义-赖良顺.docx。(内部)Dataset和Tool相关之1.2——相关首选项定义及修改-赖良顺.docx。(内部)Dataset和Tool相关之0——概述-赖良顺.docx。

TC技术专栏 1229

Android自定义View的实现方法,带你一步步深入了解View(四)

http://www.2cto.com/kf/201401/274740.html

pgl0221的专栏 301

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android自定义view案例,Android自定义View的实现方法实例详解

一、自绘控件下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次。新建一个CounterView继承自View,代码如下所示:可以看到,首先我们在CounterView的构造函数中初始化了一些数据,并给这个View的本身注册了点击事件,这样当CounterView被点击的时候,onClick()方法就会得到调用。而onClick()方法中的逻辑就更...

weixin_30187777的博客 347

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 自定义View (一)

很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章。先总结下自定义View的步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw 我把3用[]标出了,所以说3不一定是必须的,当然了大部分

Hongyang 44万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 自定义View(一):View是什么?如何创建自定义view,自定义属性等

当android内置view无法满足我们的时候,我们需要自定义View。那么我们应该如何自定义?如何绘制呢?接下来,我们会通过一个案例进行讲解。class MyEditText @JvmOverloads constructor(//第一步:继承EditText= nullinit {//直接设置显示出来x。) {//第二步:当文字发生改变的时候,则调用这个方法,进行图标的显示//第四步:触摸的时候,并且坐标是在图标上面,才进行文字的删除。event?

前期后期 2822

了解如何实现自定义View

首先,你需要创建一个新的类来代表你的自定义View。这个类应该继承自View类或其子类,如ViewGroup等。选择哪个父类取决于你的自定义View是否需要包含其他子视图(ViewGroup),或者是否有特定的性能需求(如和适用于复杂的图形渲染)。为了在你的应用程序中使用自定义View,你需要在布局文件中引用它。你需要使用完整的类名(包括包名)作为自定义View的标签名,并为其设置必要的属性。如果你定义了自定义属性,你还需要在文件中声明这些属性,并在布局文件中通过命名空间引用它们。

Good_tea_h的博客 1304

带你深入了解Android自定义View

在 Android 开发中,View 是用户界面的基本构建块,例如按钮、文本框和图像视图等。自定义 View 意味着开发者可以根据自己的需要创建自定义的界面元素,实现个性化的用户界面。自定义 View 具有更高的灵活性和可定制性,可以满足特定的设计需求。自定义 View 可以广泛应用于 Android 应用程序的各个方面。

Dakaring的专栏 1212

自定义view学习(一)---自定义view

一直感觉会自定义view很牛掰,在毕设项目中多处用到自定义控件,但都是在别人的框架上造轮子,一直打算总结一下自定义控件的实现方式,今天就来总结一下吧。 回到主题,自定义View ,需要掌握的几个点是什么呢?  我们先把自定义View细分一下,分为两种  1) 自定义View 2) 自定义ViewGroup  今天先总结自定义view(看大牛们的博客,根据自己的理解和学习习惯总结,嘿嘿

静下心来吧,让自己变强大点! 3051

Android自定义View:带你了解神秘的MeasureSpec类

前言 在了解自定义View三大流程的Measure过程前,我们需要了解一个重要基础:MeasureSpec 今天,我将全面解析 MeasureSpec类的相关知识,希望你们会喜欢 文章较长,建议收藏等充足时间再进行阅读 目录 1. 简介 2. 组成 测量规格(MeasureSpec) = 测量模式(mode) + 测量大小(size) 测量规格(MeasureSpec):32位...

Carson带你学Android 3354

Android自定义view详解,使用实例,自定义属性,贝塞尔曲线

前言 自定义View原理是Android开发者必须了解的基础; 在了解自定义View之前,你需要有一定的知识储备; 本文将全面解析关于自定义View中的所有知识基础。 目录 1. View的分类 视图View主要分为两类: 类别 解释 特点 单一视图 即一个View,如TextView 不包含子View 视图组 即多个View组成的ViewGr...

meixi_android的博客 3638

自定义View从实现到原理(一)- 自定义View的简单实现

自定义View在我自学Android开发中一直感觉是高手才能掌握的知识,因为情况太多而且界面看起来有很复杂炫酷。但是自定义View同样遵循着某些规则,这篇博客我就从这个规则入手,先实现View,在涉及原理。

Loveyy 2627

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

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

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

m0_46368082的博客 2217
上一篇: 自定义View(加载动画)
下一篇: android处理消息机制----Handler
深巷落叶
博客等级 码龄16年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值