当需要在视图上执行invalidate()时

我对this question的回答刚刚被接受,但我开始怀疑什么时候需要使()视图无效,什么时候没有必要?

我对this question的回答刚刚被接受,但我开始怀疑什么时候需要使()视图无效,什么时候没有必要?

经过一番思考,我意识到它应该或多或少像这样工作:

“everything”的实际绘制发生在onResume()之后

在“空闲”时间,屏幕的部分可以重绘,但只有那些是invalidated(和的一切)

因此,如果我在onResume()之后更改某些内容(例如,作为对按钮单击的响应,我应该invalidate()更改的View)。

然而,从this question中的 scana 说,它必须更复杂,它取决于使用什么方法。

例如,关于一个人是否使用

lastClicked.setImageBitmap();

lastClicked.setImageResource();

所以,当需要执行 invalidate()在视图上,它是如何工作的?

99

(考虑接受一些答案)

通常,invalidate()表示“redraw on screen”。i在屏幕上返回,并导致调用视图的1

如果你实现一个自定义视图,你将需要调用invalidate()每当支持模型的变化,你需要重绘你的视图。它也可以用来创建简单的动画,在那里你改变状态,然后调用invalidate(),再次改变状态,等等。

30

通常,系统会自动为您的小部件处理调整大小,隐藏,显示和大量其他事情,但如果绘制像素或备份数据的基础缓冲区已更改或过时(您交换视图上的图像资源或原始数据集更改),则有时会出现问题。

在处理绘图的这些情况下,您必须使用Widget.invalidate()告诉系统其底层数据不处于良好状态,并且重新绘图在主线程上排队,正如您所提到的。根据系统实现和 Android 版本,系统跟踪的更改会有所不同,但我通常做的是假设系统资源(字节数组,char 数组,资源索引,手动绘图不需要在上下文中跟踪)

0

请记住,在屏幕上绘制是一个频繁的过程,每当您更新视图时,该更改应该被传播并重新绘制以通知此类更改。invalidate()是一种触发方法,它发出信号,强制重新绘制您希望显示更改的任何视图。

-1

当我想画一个 textPaint 时,我遇到了这个问题!我的代码是

    canvas.drawPaint(textPaintNumber)
    canvas.drawText("MyText", 30F, 63F, textPaintNumber)

我清除了第一个棉绒,问题解决了

    canvas.drawText("MyText", 30F, 63F, textPaintNumber)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(801)
Tqdm为每个循环制作一个进度条 而不是为每个循环更新一个单条
上一篇
为什么必须在反向传播神经网络中使用非线性激活函数 (nonlinear activation function)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(72条)