当前位置: 首页 > news >正文

android 怎么自定义view

首先了解view的绘制流程:

所以onmeasure ---测量view  

onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view

而onDraw----是继承view时候需要操作的。

所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。

              自定义View,一般是没有现成的view

序列化,大概有这个意思,不一定对。
自定义序列化: IOT
协议比如:物联网:蓝牙:传递的数据 串口 协议:

onmeasure的测量 是先从子布局开始还是先从父布局开始的?

----根据算法来控制的,比如view pageer就是父布局开始

MeasureSpec是什么

public static class MeasureSpec {private static final int MODE_SHIFT = 30;private static final int MODE_MASK  = 0x3 << MODE_SHIFT;/** @hide */@IntDef({UNSPECIFIED, EXACTLY, AT_MOST})@Retention(RetentionPolicy.SOURCE)public @interface MeasureSpecMode {}

----是view里面的一个类---我们知道int 是32位

------上面代码里的30,就是高两位是00,后面30位---》所以这组成里MeasureSpec

-------高两位表示UNSPECIFIED,EXACTLY,AT_MOST

关于getChildMeasureSpec(int spec, int padding, int childDimension)算法

第一个参数,父亲给的,

第二个参数,父亲的

第三个参数,孩子需要的

-----》根据UNSPECIFIED,EXACTLY,AT_MOST来计算

 public static int getChildMeasureSpec(int spec, int padding, int childDimension) {int specMode = MeasureSpec.getMode(spec);int specSize = MeasureSpec.getSize(spec);int size = Math.max(0, specSize - padding);int resultSize = 0;int resultMode = 0;switch (specMode) {// Parent has imposed an exact size on uscase MeasureSpec.EXACTLY:if (childDimension >= 0) {resultSize = childDimension;resultMode = MeasureSpec.EXACTLY;} else if (childDimension == LayoutParams.MATCH_PARENT) {

相关文章:

  • Java面试题及答案整理汇总
  • Springboot+Redis:实现缓存 减少对数据库的压力
  • 防范服务器被攻击:查询IP地址的重要性与方法
  • Java 多线程(超详细讲解)上篇
  • 实现:mysql-5.7.42 到 mysql-8.2.0 的升级(二进制方式)
  • BUGKU-WEB shell
  • Vector Magic:高效图像矢量化工具,轻松实现图片转矢量
  • PTA L2-021 点赞狂魔
  • 众生度尽,方证菩提,地狱不空,誓不成佛;男人一定要帅,像地藏王菩萨一样
  • 张宇高数一学习笔记-第一讲-函数极限与连续(1)
  • 移除元素(leetcode)
  • HarmonyOS NEXT应用开发之大文件拷贝案例
  • 提升零售行业竞争力的信息抽取技术应用与实践
  • 深入挖掘C语言之——枚举
  • [Linux] 进程间通信基础
  • [译]Python中的类属性与实例属性的区别
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Linux系统编程】快速查找errno错误码信息
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • C++类的相互关联
  • JS实现简单的MVC模式开发小游戏
  • mysql 数据库四种事务隔离级别
  • orm2 中文文档 3.1 模型属性
  • overflow: hidden IE7无效
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 协程
  • 在Docker Swarm上部署Apache Storm:第1部分
  • UI设计初学者应该如何入门?
  • #Java第九次作业--输入输出流和文件操作
  • (1)bark-ml
  • (1)SpringCloud 整合Python
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)memcache、redis缓存
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net MySql
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [Android Pro] AndroidX重构和映射
  • [Android]通过PhoneLookup读取所有电话号码
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [C# 开发技巧]实现属于自己的截图工具
  • [CF543A]/[CF544C]Writing Code
  • [Java、Android面试]_05_内存泄漏和内存溢出