我正在编写一个 android 应用程序,它构建一个(比如说)640*480 像素的离屏位图并将其显示在 SurfaceView 中。请注意,图像的尺寸大于手机上的实际显示尺寸。
应用程序的工作方式是它最初显示图像的左上角 (0,0),然后我希望能够滚动图像。
我的 Surfaceview 类实现了 onMeasure 回调并返回 1024*768 的大小,显示与手机屏幕对应的图像区域。我想实现对滚动的支持,由于文档非常有限(只是一堆类和没有一致性的调用),我发现这几乎是不可能的。我试过只调用 scrollBy,但这不起作用。
如果有人对如何进行有任何指示,我们将不胜感激。
最佳答案
一旦开始使用 SurfaceView,您就会进入一个拥有空白像素区域的世界,您可以自行绘制所需的像素。你自己做所有事情——这意味着你也需要自己实现滚动。这不是微不足道的事,但也不是太难。
一种方法如下: - 扩展 SurfaceView 并实现 SurfaceHolder.Callback - 使用 getHolder().addCallback( this ) 获取回调 - 使用 OnTouch 事件实现滚动行为(即,响应时,从 MotionEvent 获取 x、y 位置并适当设置偏移量)。
实现一个线程来处理图像的更新。网络上有这方面的示例(抱歉 - 现在手头没有)。
或者,使用离屏位图并由普通 ImageView 绘制它(将 ImageView 调整为位图的大小并将其放置在 ScrollView 中)。
编辑:
看到这仍在获得意见,可能值得指出的是,自从这次以来,我已经实现并作为开源发布了一个小型库,该库实现了上述功能的框架(灵感来自此处的许多评论SO,等等)。可以在 Github 上找到:https://github.com/micabyte/android_game
关于Android SurfaceView 滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096618/