我正在使用SurfaceView在Android应用中显示大图像(通常比屏幕大,但并不总是如此)。这实际上是简单的图形,使用OnTouchListener或GestureDetector很容易实现滚动。图形在Render循环中运行,但是对于所有真实设备来说,性能似乎已经足够了(尽管仿真器可能有点痛苦)。
我正在考虑在图像上实现Pinch和Zoom,但是我宁愿避免使用OpenGL,因为我对OpenGL的经验很少,并且使用OpenGL对于这么简单的事情来说似乎太过分了。
似乎android.graphics.Camera类可能允许我实现我想要的缩放功能。
有没有人知道在基本的Android SurfaceView上实现类似缩放功能的任何好例子?
此外,如果你已经实现了这样的事情,对性能的任何想法? OpenGL是否值得额外麻烦,因为这里需要的是如此简单?
这里的问题不清楚,或者我在Android开发者网站上遗漏了一些我应该找到的非常明显的文档/代码?
答案 0 :(得分:3)
好的 - 我终于有时间真正地工作并研究了一段时间,我实际上找到了解决问题的解决方案。
该解决方案依赖于BitmapRegionDecoder(API10 +)。这样做是允许应用程序加载位图的一部分,而不是试图一次性加载整个位图。
解决方案的本质:
为了第一次实现我发现的想法,他获得了John Lombardo的信任。
我在https://github.com/micabyte/android_game
开源我自己的实现以及我的其他一些实用工具类这是一个非常近期的实施,所以它目前没有受到真实用户的火灾洗礼。但是,我已经运行测试显示8000x4000像素位图,到目前为止没有问题。性能当然似乎足以满足我的需求。
答案 1 :(得分:0)
通过将ScaleGestureDetector和Canvas接口与转换矩阵相结合,您可以实现捏合和缩放。您将希望使用相同的转换矩阵来处理缩放和转换。
答案 2 :(得分:0)
查看索尼爱立信开发者网站上的One Finger Zoom示例。 http://developer.sonymobile.com/wp/tag/zoom/