Android canvas 宽高波动

Android canvas width and height volatility

我正在创建一个 Android 应用程序,它在我的 View class 的 onDraw(Canvas canvas) 方法中进行了大量处理。 应用程序强制纵向模式

我的问题是,假设 canvas 的高度和宽度不会在两次调用 paint 方法之间发生变化,这有多安全?我问的原因是我然后使用这些值来构造我在 onDraw 方法期间使用的相当多的对象。如果我假设高度和宽度不会改变,那么我可以缓存首次调用 onDraw 方法时创建的 30 个左右的对象。

我做过很多 Swing 编程,这绝对是你在 Swing 中不会做的事情,但是在我看来,某人的 phone 的高度和宽度不太可能改变。

这是一个正确的假设吗?我已经尝试过并且效果很好,但是我担心可能会有一个我没有意识到的陷阱。

感谢您的指导!

这完全取决于您的 View 可能发生的事情。这基本上可以转化为:这取决于您的 layout 以及您打算用 View.

做的事情

所以...您可以安全地假设 canvas 的大小不会改变,只要您可以确保 View 的大小不会改变。如果没有什么可以强制您的 View 调整大小,您的 canvas' 大小将保持不变。

解决此问题的最简单方法是将所有对象分配(无论如何都不应该位于 onDraw 方法内)移动到 ViewonSizeChanged 方法(或 onLayout)。这样,每次 View's 大小更改(由于某些原因)时,您的对象都可以重新初始化或更正,以便与您的 drawing 进程一起正常工作。