View invalidate方法研究

Android-View-invalidate 绘制流程 转载地址:https://juejin.cn/post/7100121390090551332 背景 Invalidate() 是 Android 中 View 的方法,通常我们使用它来完成UI的刷新, 作用 如果这个 View 可见那么 onDraw() 方法将在未来某个时间点被调用。 问题 invalidate() 会触发那些 view 的重绘,invalidate() 绘制流程是如何实现的? 我们带着问题来从源码开始分析: 源码分析 一、View 与 ViewGroup 的层级 在 Android. 阅读详情

Invalidate 英文废弃,无效的意思。不知道写api的人为什么不用redraw之类的更直接的词语而用这个词语。

大家都知道,view 调用 Invalidate 方法会导致重绘。

那么具体的情况是什么呢?


我写了一个demo去研究这个方法的作用。

在VISIBLE的情况下:


1.一个非容器的view 调用Invalidate():

 会调用 此view的onDraw() ,重绘它自己。


2.一个容器的view调用Invalidate():

如果这个容器有背景,会调用 此view的onDraw() ,重绘它自己。

如果这个容器没有背景,不会调用 此view的onDraw() ,重绘它自己。


结论:不是调用Invalidate()就一定会导致重绘。


demo 地址:

http://download.youkuaiyun.com/detail/javalive09/6867681

Android View 深度分析requestLayout、invalidate与postInvalidate 前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。 阅读详情

相关推荐

Android源码分析View刷新原理Invalidate()和PostInvalidate()

一般Ui控件使用来简单开发时,并没有注意到系统如何刷新,而当我们自定义View或开发复杂的view时,就需要主动调用Invalidate或者postInvalidate等来通知系统刷新绘制UI,刷新视图。那接下来一个个来剖这两个Api的具体实现。Invalidate()invalidate最后调用到invalidateInternal函数,把view的相对尺寸和相关状态设置传递 void in

在路上-codingAndlearning 1755

View的invalidate()方法的源码分析

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

neuHenry 6014

Android中View绘制流程以及invalidate()等相关方法分析

Android中View绘制流程以及invalidate()等相关方法分析

Android图形学习--从view的invalidate认识刷新VSYNC

参考资料: DJLZPP AndroidQ 图形系统(11)UI刷新,SurfaceFlinger,Vsync机制总结_DJLZPP的博客-优快云博客 在以前的学习中,通过GraphicBuffer的传送和数据读写了解到数据的传送显示流程,没有涉及到画面的刷新,这里通过view的刷新来学习一下, 在GLSurfaceView中,相关onDrawFrame方法会随着屏幕刷新而调用起来。 在普通的view里面,通过调用invalidate方法来注册vsync信号,开始一帧画面的绘制,调用到onD

aaajj的专栏 865

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

电机驱动技术中关于磁阻转矩生成的理解

正交在物理学和数学中指的是两个方向或两个向量之间的夹角为90°(直角)。在图中,当气隙磁场的轴线与转子轴线的夹角为90°时,我们称它们为正交。转子磁极的方向。通常由转子的磁极中心指向另一极的连线表示。转子轴线用图示中的d 轴表示。通过对定子、转子、气隙磁场、磁力线的理解,我们可以清晰地分析不同角度下电磁转矩的方向。这种分析不仅有助于电机的理论学习,还能为实际设计提供重要参考。掌握这些基础知识后,可以更好地理解电机工作原理及优化其性能。

weixin_48327795的博客 2074

刷新View视图的两种方法—invalidate()和postInvalidate()的区别和使用详解

一、前期基础知识储备Invalidate英文释义:刷新上,官方文档:由官方文档,我们可以知道,invalidate()和postInvalidate()方法都是用来刷新View界面/View视图的。1)区别:invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把...

Chin_Style的博客 8055

pytorch中dataloader的num_workers参数

结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di

qq_40990057的博客 1万+

Android面试题之View的invalidate方法和postInvalidate方法有什么区别

综上源码我们可以得出结论:(1)postInvalidate方法调用了ViewRootImpl中的dispatchInvalidateDelayed方法向ViewRootImpl中的ViewRootHandler发送一个消息,最后调用的还是View的invalidate方法。(2)因为ViewRootImpl是在UI线程的,所以postInvalidate方法的作用就是将非UI线程的刷新操作切换到UI线程,以便在UI线程中调用invalidate方法刷新View。

AntDream的程序世界 1315

【ROS】usb_cam相机标定

1. 唠叨两句 当我们要用相机做测量用途时,就需要做相机标定了,不然得到的计算结果会有很大误差,标定的内容包括三部分:内参,外参还有畸变参数。所以标定的过程就是要求得上面这些参数。 以前弄这个事估计挺麻烦,需要做实验和计算才能得到,现在通过ros的开源包几分钟就能完成相机标定,感激! 具体的内外参和畸变系数的说明,可以看看Reference里面的第一个链接,写得很详细。 2. 准备工作 要准备三样东西: usb_cam的ROS启动包 相机标定的ROS包 还有一个用于标定的棋盘格 1)usb_cam启动包

Will_Ye的博客 8201

做小程序支付时,我是怎么被“虚拟支付”绊了一跤的

微信小程序支付开发中,普通支付与虚拟支付存在本质差异。开发者常误将虚拟权益(会员、点数等)当作普通商品支付,导致审核失败。两者在审核关注点、结算方式、API调用及平台政策上都截然不同。关键点在于:1)先明确交易对象类型;2)产品命名需真实反映权益性质;3)支付成功≠业务完成;4)审核说明要详细描述交付逻辑;5)避免依赖过时规则。正确顺序应是:判断商品属性→选择支付类型→设计订单系统→准备审核材料。这个认知差异比技术实现更重要,提前理解平台规则可大幅减少返工。

zhurizhe71的学习之路 2580

Android自定义View之invalidate和postInvalidate方法的区别

我们在自定义View时免不了要使用invalidate方法,这个方法的作用大家也比较清楚,就是让我们的View进行刷新重新绘制的。但是postInvalidate方法可能就不是那么熟悉了,因为平时开发时invalidate方法相对而言会用得比较多。不过需要大家注意的是,面试官在问到View相关的问题时,就很有可能会问到postInvalidate方法,所以我们还是有必要来学习一下。 那inval...

AntDream的程序世界 1674

OData V2 消息在 SAP UI5 中的生成、传播与治理全解

SAP UI5 的 OData V2 消息机制通过自动解析服务端响应头(sap-message)或错误体,将消息推送到全局 MessageModel,实现数据质量保障。关键点包括:1)消息通过目标路径与控件绑定联动,触发高亮等反馈;2)生命周期管理需注意避免自动刷新导致消息丢失;3)常见陷阱如批处理错误重复、内外层消息冲突等可通过精准目标路径或自定义处理器解决。代码示例展示了如何配置模型、消息模型及 MessagePopover 实现端到端消息展示,同时支持控件通过 refreshDataState 自定义

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 231

从invalidate分析view绘制流程

1.前言 关于view的绘制流程,现在网上一查,就会直接告诉你,view的绘制流程是先onMeasure,然后onLayout,在最后onDraw,没错,绘制流程确实也是这样。所以我们今天要讨论的话题除了那三大方法内部到底做了什么,还要知道这个流程是怎么来的。这样大家就会对view的绘制过程有一个比较清晰的认识。 这里我想从view的一些常用方法来进行研究,就从invalidate这个方法开始吧。...

你缺少想象力的博客 4113

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3284

代谢组数据分析(十五):基于python语言构建PLS-DA分类预测模型

本教程阐述典型代谢组学数据分析工作流程,用于二元分类结果的研究。流程主要步骤如下:首先从 Excel 表格导入代谢物与实验数据,接着基于汇总 QC 进行数据清洗。随后借助主成分分析可视化检查数据质量,再开展两类单变量统计。之后运用偏最小二乘判别分析(PLS - DA)实施多变量分析,此过程涵盖模型优化(对比 R2 与 Q2)、置换测试及明确模型预测指标、确定特征重要性、对模型预测数据进行可视化。最终将统计表格导出至 Excel 表格,完整呈现从数据导入到分析结果输出的全过程。

专注生信领域 2875

View的invalidate和postInvalidate

1 作用 invalidate和postInvalidate常用于刷新View,都会导致View重绘,重新调用view的onDraw方法。 invalidate必须在ui线程使用,postInvalidate可以在子线程中使用。 /** * Invalidate the whole view. If the view is visible, * {@link #onDr...

lidongxiu0714 1162

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java invalidate_view.invalidate()原理

加载View的onDraw()方法的时机以及invalidate()方法的作用。事实上,远远没有您想象的那么简单。为了写好这篇博客,还是拿例子说事吧。[java] view plaincopyprint?package mark.zhang;import android.app.Activity;import android.content.Context;import android.grap...

weixin_42316909的博客 509

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android view中invalidate方法学习小节

/**      * Invalidate the whole view. If the view is visible,      * {@link #onDraw(android.graphics.Canvas)} will be called at some point in      * the future. This must be called from a UI thread

u011045817的专栏 1844

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

精通Android自定义View(十五)invalidate方法和postInvalidate方法

1 概述 invalidate方法和postInvalidate方法都是用于进行View的刷新,invalidate方法应用在UI线程中,而postInvalidate方法应用在非UI线程中,用于将线程切换到UI线程,postInvalidate方法最后调用的也是invalidate方法。 2postInvalidate方法源码分析 @UiThread public clas...

代码小疯子 1526

invalidate方法知多少[-View-] 源码级

零、前言 本文聚焦: [1].View#invalidate做了什么,为什么会触发View的重绘? [2].View是如何被添加到ViewGroup中的? [3].ViewGroup和ViewRootImpl在invalidate孩子上做了什么? [4].源码的层次上分析invalidate和postInvalidate的差异与联系? 复制代码 1.View#invalidate方法 ----&...

weixin_33877092的博客 238

【Android View绘制体系】invalidate

invalidate内部思想 invalidate的调用流图View.invalidateInternal打上DIRTY标记为后面Draw做准备mPrivateFlags |= PFLAG_DIRTY;调用父组件的invalidateChild并将自身相对位置left,top,right,bottom通知给父组件ViewGroup.invalidateChild循环执行父组件的invalida

1569

Android自定义View之requestLayout方法和invalidate方法

自定义View的时候难免会和这2个方法打交道,在之前的文章中我们已经介绍了invalidate方法,今天我们来对比下requestLayout方法和invalidate方法有什么不同之处 等不及的先给个结论: requestLayout方法会导致View的onMeasure、onLayout、onDraw方法被调用;invalidate方法则只会导致View的onDraw方法被调用 ...

AntDream的程序世界 957

Android面试之View绘制流程以及invalidate()等相关方法分析

http://zhan.renren.com/zatanzashjuo?gid=3602888498059252492&checked=true Android面试之View绘制流程以及invalidate()等相关方法分析 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为

xingui6的博客 1340

invalidate和postInvalidate的区别及使用

总结: invalidate在主线程中调用,postInvalidate在子线程中调用,最终调的也是view.invalidate() invalidate() -> parent.invalidateChild() -> 层层找到parent,parent.invalidateChildInParent(),直到ViewRootImpl ViewRootImpl.inva...

just Go! 2088
上一篇: addView 源码调用顺序的迷惑
下一篇: android 中 的md5加密信息内容
javalive09
博客等级 码龄16年 43粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值