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
方法内)移动到 View
的 onSizeChanged
方法(或 onLayout
)。这样,每次 View's
大小更改(由于某些原因)时,您的对象都可以重新初始化或更正,以便与您的 drawing
进程一起正常工作。
我正在创建一个 Android 应用程序,它在我的 View
class 的 onDraw(Canvas canvas)
方法中进行了大量处理。 应用程序强制纵向模式。
我的问题是,假设 canvas 的高度和宽度不会在两次调用 paint 方法之间发生变化,这有多安全?我问的原因是我然后使用这些值来构造我在 onDraw 方法期间使用的相当多的对象。如果我假设高度和宽度不会改变,那么我可以缓存首次调用 onDraw
方法时创建的 30 个左右的对象。
我做过很多 Swing 编程,这绝对是你在 Swing 中不会做的事情,但是在我看来,某人的 phone 的高度和宽度不太可能改变。
这是一个正确的假设吗?我已经尝试过并且效果很好,但是我担心可能会有一个我没有意识到的陷阱。
感谢您的指导!
这完全取决于您的 View
可能发生的事情。这基本上可以转化为:这取决于您的 layout
以及您打算用 View
.
所以...您可以安全地假设 canvas
的大小不会改变,只要您可以确保 View
的大小不会改变。如果没有什么可以强制您的 View
调整大小,您的 canvas'
大小将保持不变。
解决此问题的最简单方法是将所有对象分配(无论如何都不应该位于 onDraw
方法内)移动到 View
的 onSizeChanged
方法(或 onLayout
)。这样,每次 View's
大小更改(由于某些原因)时,您的对象都可以重新初始化或更正,以便与您的 drawing
进程一起正常工作。