我的问题是关于绘图性能的。假设我有一个图像宽度为 2400 像素、高度为 800 像素的位图。
我的 Canvas
只有 800 像素宽和 800 像素高。包含 Canvas
的 View
是 HorizontalScrollView
的子级,因此用户可以滚动查看整个图像。
我加载一次Bitmap
并在onDraw
方法中每帧绘制它。在这种情况下,“离屏”绘图是否会导致性能问题?如果是这样,如何让它更流畅?
谢谢。
最佳答案
当然,位图大小是一个问题。在典型的Android实现中,尺寸超过4000px的纹理无法渲染。在某些 Android 设备中,此限制为 2000 像素。
由于您的目标是让用户滚动查看整个图像,如果我是您,我不会使用 HorizontalScrollView。相反,您应该实现 View 的子类并重写 onDraw(Canvas canvas) 方法。然后您可以检测触摸并修改矩阵。这样的矩阵将在调用 Canvas.drawBitmap(Bitmap, Matrix,Paint) 时使用
针对图片过大的问题,在收到Bitmap对象后,可以将其切成6 block 。 (2400 x 800 -> 800 x 800 x 6)。然后你应该控制视口(viewport)位置并推断图像的可见部分。在最好的情况下,您只需要绘制 1 800x800 位图。在最坏的情况下,您需要绘制 4 个 800x800 位图。
关于android - Android 中离屏绘制到 Canvas 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20140979/