Android 自定义View一
1.继承已有VIew,改写尺寸:重写onMeasure
SquareImageView
2.完全自定义重写onMeasure
3.自定义Layout 重写onMeasure onLayout
1.继承已有VIew,改写尺寸:重写onMeasure
流程:
重写onMeasure
用getmeasureedWidth getMeasuredHeight获取测量尺寸
计算最终尺寸
setMeasuredDissmension(w,h)保存结果
getMeasuredWidth getMeasuredHeight 测量期望尺寸,在测量过程中使用(提前取)
getWidth = right -left, geiHeight = bottom-top 实际尺寸,在非测量过程使用(更准确)
onMeasure 测量 根据自身测量和父VIew约束进行判断 ATMODE EX.....
val width = when(specMode) {MeasureSpec.EXACTLY -> specSize//精确MeasureSpec.AT_MOST -> if ( size > specSize) specSize else size//约束,大于else -> size //不限制
}在kotlin 等同于下面写法,更加简洁
val width1 = resolveSize(size,widthMeasureSpec)
resolveSize 、 resolveSizeAndState 区别: 结果是一样的
还有 resolveSizeAndState 在进行自身测量和父布局给出的大小不一致时,会标记SALL,MASK,然后给父VIew一个值,父VIew会拿到结果进行重新测量
tips:很多系统ViewGroup大多数不会去读resolveSizeAndState 的TO_SMALL 等标志位
源码:
package com.example.myapplication.viewimport android.content.Context
import android.util.AttributeSet
import android.widget.ImageView
import androidx.appcompat.widget.AppCompatImageView
import kotlin.math.minclass SquareImageView(context : Context,attributeSet: AttributeSet) : AppCompatImageView(context,attributeSet){// override fun layout(l: Int, t: Int, r: Int, b: Int) {
//
// val width = r-l
// val height = b-t
// val size = min(width,height)
// super.layout(l, t, l+size, t+size)
// }override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {super.onMeasure(widthMeasureSpec, heightMeasureSpec)val size = min(measuredWidth,measuredHeight)setMeasuredDimension(size,size)}
}
package com.example.myapplication.viewimport android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.util.AttributeSet
import android.view.Viewclass CircleView(context: Context,attributeSet: AttributeSet) :View(context,attributeSet) {private var paint = Paint(Paint.ANTI_ALIAS_FLAG)private val RADIUS = 300fprivate val PADING = 300foverride fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {val size = ((PADING + RADIUS) * 2).toInt()val specMode = MeasureSpec.getMode(widthMeasureSpec)val specSize = MeasureSpec.getSize(widthMeasureSpec)val width = when(specMode) {MeasureSpec.EXACTLY -> specSize//精确MeasureSpec.AT_MOST -> if ( size > specSize) specSize else size//约束,大于else -> size //不限制}val width1 = resolveSize(size,widthMeasureSpec)val height1 = resolveSize(size,heightMeasureSpec)setMeasuredDimension(width1,height1)}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)canvas.drawCircle(PADING + RADIUS,PADING + RADIUS,RADIUS,paint)}
}相关文章:
Android 自定义View一
1.继承已有VIew,改写尺寸:重写onMeasure SquareImageView 2.完全自定义重写onMeasure 3.自定义Layout 重写onMeasure onLayout 1.继承已有VIew,改写尺寸:重写onMeasure 流程: 重写onMeasure 用getmeasureedWidth …...
11、电路综合-集总参数电路结构的S参数模型计算与Matlab
11、电路综合-集总参数电路结构的S参数模型 电路综合专栏的大纲如下: 网络综合和简化实频理论学习概述 前面介绍了许多微带线电路综合的实际案例,如: 3、电路综合原理与实践—单双端口理想微带线(伪)手算S参数与时域…...
计算机网络--真题
因特网上专门用于传输文件的协议是 因特网上专门用于传输文件的协议通常是 FTP(File Transfer Protocol)。FTP 是一种标准的网络协议,用于在计算机之间传输文件。它允许用户在客户端和服务器之间传输文件,上传文件到服务器或从服务…...
java毕业设计基于ssm的招聘求职网站
项目介绍 本前途招聘求职网站是针对目前仓库的实际需求,从实际工作出发,对过去的前途招聘求职网站存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确…...
【JavaEE初阶】 初识网络原理
文章目录 🌲网络发展史🚩独立模式🚩网络互连📌局域网LAN🎈基于网线直连🎈基于集线器组建🎈基于交换机组建🎈基于交换机和路由器组建 📌广域网WAN 🍀网络通信基…...
LeetCode题解:993. 二叉树的堂兄弟节点,BFS,JavaScript,详细注释
原题链接: https://leetcode.cn/problems/cousins-in-binary-tree/ 解题思路: 使用队列进行BFS搜索,同时保存每个节点,以及其深度和父节点信息。当搜索到x和y时,对比深度和父节点,如果满足要求࿰…...
在python中加载tensorflow-probability模块和numpy模块
目录 操作步骤: 注意: 问题: 解决办法: 操作步骤: 在虚拟环境的文件夹中,找到Scripts文件夹,点击进去,找到地址栏,在地址栏中输入cmd,进入如下界面。 输…...
t2017递推2猴子摘桃
2、猴子摘桃(nhoi2005xx1) Description 果园里种了很多桃树,当桃树开始结果的时候,猴子便会成群结队地前来摘桃。 猴子们第一天会摘掉桃子的一半还多一个,第二天再摘第一天剩下的一半还多一个,以后每天均摘掉上一天剩下的一半还…...
呼吸灯【FPGA】
晶振50Mhz 1us 等于 计0~49 1ms等于 0~999us 1s等于 0~999ms //led_outalways(posedge FPGA_CLK_50M_b5 or negedge reset_e8) //【死循环】敏感【触发条件:上升沿 clk】【运行副本】if(reset_e81b0)begin //50Mhz晶振, 49_999_999 是 1秒…...
Codeforces 1855E 数学期望 + DP
题意 传送门 Codeforces 1855E Expected Destruction 题解 将 S i S_i Si 运动至 S i 1 S_{i1} Si1 的情况看作后者消失,则 S i S_i Si 在碰到 S i 1 S_{i 1} Si1 前, S i 1 S_{i 1} Si1 必然存在。 根据数学期望的线性性质&…...
5-1CComplex运算符重载为友元
以下是一个用运算符重载为友元重载的方法重做复数加减法的运算,请填空完成程序。 #include <iostream> using namespace std; class CComplex { private:double real; double imag; public:CComplex(double r0.0,double i0.0){ real(r), imag(i)}friend…...
Vue3.0 watch和watchEffect监听器:VCA
简介 在项目中,有时候检测一个变量的值是否反升了变化。通常使用的watch或者使用低效的循环判断。 在次vue中给我们设置了深度监测数据繁盛变化的方法。 1.vue中提供了在watch监听时设置deep:true 就可以实现对对象的深度监听; 2.immediate:true,代表watch里面声明了…...
1360. 日期之间隔几天
1360. 日期之间隔几天 Java代码: 【DateFormat】DateFormat用于实现日期的格式化 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; // 好像已过时class Solution {public int daysBet…...
ubuntu配置 Conda 更改默认环境路径
我的需求是以后凡是新建一个虚拟环境都需要安装在一个挂载了大容量的分区/data里面 /home里面的是即将爆满但是还能塞点东西的硬盘. 如果您想要永久更改 Conda 的默认环境路径,可以编辑 Conda 的配置文件。首先,找到 Conda 的配置文件通常是 .condarc 文…...
华山编程培训中心——工业相机飞拍
飞拍功能是一种高速运动图像采集技术,通过降低相机的曝光时间来拍摄快速移动的对象,以提高工作效率和加快生产速度。下面视频演示工业相机飞拍: 上位机控制工业相机飞拍演示 一. 飞拍对相机硬件的要求 全局快门相机:飞拍要求相机…...
linux 释放缓存命令并做成定时任务
这个命令组合可以实现将待写入的数据同步到磁盘中,然后释放页面缓存。具体命令为: sync; echo 1 > /proc/sys/vm/drop_caches 第一个命令 sync 是将所有待写入磁盘的数据刷新到磁盘中,确保数据写入完成。第二个命令 echo 1 > /proc/…...
求解一个整数中含多少个1
1.问题描述:给定一个整数,统计其对应的二进制中含有1的个数。比如8(0000 1000),对应的二进制数中,只含有一个1. 2.设计思路:对x取余:zx%2。如果z!0,说明x的末尾不是为1.对于一个二进制x4x3x2x1…...
js编写一个函数判断所有数据类型
一、typeof 在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。 对于数组、对象来说,其关系错综复杂&…...
Python对于时间相关模块的学习记录(time,datetime等模块)
1,time.time() 获得从计算机开始出生到现在的秒数(也成时间戳),可以时间相减计算流逝时间 说明 :擅长时间相减计算流逝时间 导入方法 import time import time# 1,time.time 获得从计算机开始出生到…...
【C#】获得所有可见窗口信息
【背景】 由于自己的瘦客户端上的Windows自带截图软件功能被阉割,所以自己写了一个,其中有窗口截图功能,涉及到获得所有可见窗口的信息。 【代码】 public WindowInfo[] GetAllDesktopWindows(){//用来保存窗口对象 列表List<WindowInf…...
从ARXML文件反推软件架构:一个ComM模块的配置实例如何映射到你的C代码
从ARXML到C代码:ComM模块配置的逆向工程实战 当你第一次打开ComM_Cfg_SWCD.arxml文件时,那些层层嵌套的XML标签是否让你感到无从下手?作为AUTOSAR开发中最关键的配置文件之一,ARXML实际上是一张精确的"施工图纸"&#x…...
Ender3V2S1切片器脚本配置指南:优化3D打印效果的完整教程
Ender3V2S1切片器脚本配置指南:优化3D打印效果的完整教程 【免费下载链接】Ender3V2S1 This is optimized firmware for Ender3 V2/S1 3D printers. 项目地址: https://gitcode.com/gh_mirrors/en/Ender3V2S1 Ender3V2S1是一款备受欢迎的3D打印机,…...
Swift-Corelibs-Foundation 架构演进:从 Objective-C 到 Swift 的完整迁移指南
Swift-Corelibs-Foundation 架构演进:从 Objective-C 到 Swift 的完整迁移指南 【免费下载链接】swift-corelibs-foundation The Foundation Project, providing core utilities, internationalization, and OS independence 项目地址: https://gitcode.com/gh_mi…...
机器人学前沿技术探索:robotics-coursework项目高级应用指南
机器人学前沿技术探索:robotics-coursework项目高级应用指南 【免费下载链接】robotics-coursework 🤖 Places where you can learn robotics (and stuff like that) online 🤖 项目地址: https://gitcode.com/gh_mirrors/ro/robotics-cour…...
PyTorch 2.8 GPU算力优化部署教程:RTX 4090D显存利用率提升至92%
PyTorch 2.8 GPU算力优化部署教程:RTX 4090D显存利用率提升至92% 1. 环境准备与快速验证 在开始深度学习项目前,确保你的硬件配置符合以下要求: 显卡:NVIDIA RTX 4090D 24GB显存驱动版本:550.90.07或更高系统内存&a…...
如何用PlugY实现暗黑破坏神2单机体验增强
如何用PlugY实现暗黑破坏神2单机体验增强 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 在暗黑破坏神2的单机冒险中,玩家常常面临储物空间不足、角色加点…...
Graphormer参数详解:property-guided checkpoint模型结构与推理逻辑
Graphormer参数详解:property-guided checkpoint模型结构与推理逻辑 1. Graphormer模型概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB(Open Graph Benchmark)和PCQM…...
Tao-8k处理长文本技术详解:突破上下文窗口限制
Tao-8k处理长文本技术详解:突破上下文窗口限制 你是不是也遇到过这样的烦恼?想把一篇几十页的行业报告丢给AI,让它帮你总结要点,结果它告诉你“文本太长了,我处理不了”。或者,你希望AI能帮你分析一个完整…...
惊心动魄!从“卡脖子”到“心脏搭桥”,6台路由器带你亲历IPv6平滑迁移
摘要:从IPv4地址耗尽,到DNS根域服务器“卡脖子”风险,再到中国部署IPv6根服务器,网络协议的演进不仅关乎技术,更关乎国家战略。本文带你穿越互联网发展史,并通过eNSP搭建6台路由器的复杂拓扑,手把手演示如何在不重启设备、不影响业务的前提下,将网络从IPv4平滑迁移至IP…...
土地利用变化分析实战:用Python处理40年CNLUCC数据集
土地利用变化分析实战:用Python处理40年CNLUCC数据集 1972年至今的中国土地利用变化数据,如同一部记录国土变迁的"生态相册"。对于区域规划师、生态研究者而言,这套CNLUCC数据集的价值不亚于考古学家手中的碳14检测仪。本文将带您用…...
