android+png+缩放工具,在Android SurfaceView上实现捏和缩放

我正在使用SurfaceView在Android应用程序中显示大图像(通常比屏幕更大,但并不总是)。 这是非常简单的graphics,使用OnTouchListener或GestureDetector实现滚动很容易。 graphics在Render循环中运行,但是对于所有真实的设备来说,性能似乎已经足够了(尽pipe仿真器可能有点痛苦)。

我正在考虑在图像上实施捏和缩放,但是我宁愿避免去OpenGL,因为我对OpenGL的经验很less,使用OpenGL看起来好像太简单了。

看起来好像android.graphics.Camera类可能允许我实现我想要的缩放function。

有谁知道任何一个很好的例子,显示在一个基本的Android SurfaceView的捏function缩放像function的实现?

另外,如果你已经实现了这样的东西,对性能有什么想法? 鉴于这里所要求的是如此简单,OpenGL值得额外的麻烦吗?

这个问题在这里还不清楚,还是我在Android开发人员网站上丢失了一些非常明显的文档/代码,我应该find?

好的 – 终于有时间真正的工作和研究了一段时间了,我实际上find了一个解决scheme来解决我所遇到的问题。

该解决scheme依赖于BitmapRegionDecoder(API10 +)。 这样做是允许应用程序加载位图的一部分,而不是试图一次加载整个位图。

解决scheme的本质:

整个位图的下采样版本保存在内存中。 由于这个版本是下采样,它可以永久保存在那里。

一个线程将当前视口(或更多)的位图连续加载到内存(使用BitmapRegionDecoder)。 由于这个尺寸至多比屏幕稍微大一点,所以这也应该适合在记忆中。

渲染线程将适当的版本绘制到canvas上; 即如果缩小或位图不可用(例如,因为它在后台加载),则使用下采样版本。

Pan,Fling和Zoom使用GestureListeners进行处理。

值得一提的是John Lombardo首次实现了我发现的想法。

这是一个相当新的实现,所以目前还没有真正的用户的火的洗礼。 但是,我已经运行了显示8000×4000像素位图的testing,目前没有问题。 性能当然似乎足以满足我的需求。

使用缩放和缩放实现ScaleGestureDetector和Canvas接口与变换matrix的组合。 您将要使用相同的转换matrix来处理缩放和翻译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值