我正在使用SurfaceView在
Android应用程序中显示一个大图像(通常大于屏幕,但不总是).这真的是简单的图形,使用OnTouchListener或GestureDetector实现滚动很容易.图形在Render循环中运行,但性能似乎对所有真实设备来说都是足够的(尽管模拟器可能会有点痛苦).
我正在考虑在图像上实现捏和缩放,但是我宁可避免不必去OpenGL,因为OpenGL几乎没有什么经验,并且使用OpenGL似乎对这个简单的东西来说太过分了.
看起来好像android.graphics.Camera类可能允许我实现我想要的缩放功能.
有没有人知道在基本的Android SurfaceView上显示实现缩放缩放功能的好例子?
另外如果你已经实现了这样的事情,对性能的任何想法? OpenGL是否值得额外的麻烦,因为这里需要的是如此简单?
这个问题不清楚,还是我在Android开发人员网站上遗漏了一些我应该找到的一些明显的文档/代码?
解决方法
好的 – 终于有时间在这个时间上真正工作和研究了一段时间,我实际上找到了一个解决问题的解决方案.
该解决方案依赖于BitmapRegionDecoder(API10).这样做允许应用程序加载位图的一部分,而不是一次尝试加载整个位图.
解决方案的本质:
>整个位图的下采样版本保存在内存中.因为这个版本被抽样了,它可以永久保存在这里.
一个线程将位图的当前视口(或多一点)连续地加载到内存中(使用BitmapRegionDecoder).由于这是最大程度上比屏幕大,这也应该舒适地记忆.
>渲染线程将适当的版本绘制到画布;即,如果您缩小或位图不可用(例如,因为它在后台加载),则使用下采样版本.
> Pan,Fling和Zoom用GestureListeners处理.
对于John Lombardo的信用,我首先实现了我发现的想法.
我在https://github.com/micabyte/android_game开源自己的实现与我的一些其他实用程序类
这是一个最近的实施,所以在这个时候它没有真正的用户的洗礼.但是,我已经运行测试,显示8000×4000像素位图,迄今没有问题.表现肯定似乎足以满足我的需要.