在Android SurfaceView上实现捏和缩放

概述我正在使用SurfaceView在 Android应用程序中显示一个大图像(通常大于屏幕,但不总是).这真的是简单的图形,使用OnTouchListener或GestureDetector实现滚动很容易.图形在Render循环中运行,但性能似乎对所有真实设备来说都是足够的(尽管模拟器可能会有点痛苦). 我正在考虑在图像上实现捏和缩放,但是我宁可避免不必去OpenGL,因为OpenGL几乎没有什么经 我正在使用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像素位图,迄今没有问题.表现肯定似乎足以满足我的需要.

总结

以上是内存溢出为你收集整理的在Android SurfaceView上实现捏和缩放全部内容,希望文章能够帮你解决在Android SurfaceView上实现捏和缩放所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1133062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存