【发布时间】:2014-10-07 08:37:52
【问题描述】:
我正在尝试绘制大于屏幕的图像,并让用户在其周围滚动。该图像是我的代码根据一些数据计算得出的一些图表。 (这是在 Android 中使用 Java)。
我想要的是一个用户可以滚动的视图(实际上是一个 SurfaceView)。我尝试将 SurfaceView 放在 ScrollView 中,但 SurfaceView 绘制的整个图像非常大,因此(a)存在性能问题,因为我的应用程序正在绘制整个 SurfaceView,而它只需要执行视口和 (b) 我的应用程序因“尺寸太大...内存不足”错误而崩溃。
如果 View 可以实现滚动(仅垂直),然后将 y 值传递给我的代码,这样它就可以在视口中绘制我的图像的可见部分,这对我来说是最好的。
或者,我可以捕获“鼠标”事件并自己计算 y 值。
有没有人有任何代码让我可以做到这一点?
更新:我应该澄清一下,图像是由我的程序代码使用 Canvas.drawLine() 等绘制的。我可以计算图像的哪些部分适合我的视口,前提是我将滚动状态作为 y 值,并且我可以通过减去滚动 y 值来计算每个点的绝对 y 坐标。我需要的是可以在用户滚动图像时找到的东西以及生成的 y 值是什么。滚动条也不错。
更新:我正在使用 SurfaceView,以便我可以从另一个线程更新图像,从而提高用户界面性能。
【问题讨论】:
-
为什么必须有 SurfaceView?你为什么不直接创建一个带有覆盖 onDraw 的自定义视图?
-
我已编辑问题以解释原因。
-
好吧,我没有尝试使用 SurfaceView,但这应该与 SurfaceView 扩展视图一样工作:只需使用
View.scrollBy()/View.scrollTo()以显示视图的某些特定部分 -
现在我更聪明了,因为我测试了 SurfaceView 和 scrollTo/scrollBy:不幸的是它不起作用,对不起,你需要自己
translate()你的画布
标签: java android scroll surfaceview