仅更新视图的一部分而不使用 invalidate(Rect)

Posted

技术标签:

【中文标题】仅更新视图的一部分而不使用 invalidate(Rect)【英文标题】:Updating only a portion of View without using invalidate(Rect) 【发布时间】:2019-03-09 20:55:14 【问题描述】:

在我当前的应用程序中,我使用 invalidate(Rect) 来更新我当前视图的一部分,但从 API 28 开始,此方法已被弃用。 所以我的问题是:

1.还有其他方法可以只更新部分视图吗? 2.使用不推荐使用的方法有什么后果?

【问题讨论】:

【参考方案1】:

根据android文档,只要调用invalidate()方法,因为重绘区域是内部计算的。

从查看文档 This method was deprecated in API level 28. The switch to hardware accelerated rendering in API 14 reduced the importance of the dirty rectangle. In API 21 the given rectangle is ignored entirely in favor of an internally-calculated area instead. Because of this, clients are encouraged to just call invalidate().

将来可能会删除不推荐使用的方法,当这种情况发生时,您的应用程序可能无法编译。所以最好不要使用它们:)

【讨论】:

但是每当我调用 invalidate() 时,我的整个视图都会重新绘制。我对 invalidate() 的理解是它使整个视图无效并重新绘制它。我错了吗?谢谢

以上是关于仅更新视图的一部分而不使用 invalidate(Rect)的主要内容,如果未能解决你的问题,请参考以下文章

如何让 View.invalidate 在 Click Listener 中工作

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

重新加载 UITableView 而不重新加载标题部分

Ajax 和 Rails 4:创建实例变量并更新视图而不刷新

淘汰赛仅更新部分视图模型

如何仅刷新/重绘 uicollectionview 中的补充视图?