Android SurfaceView 滚动

标签 android scroll surfaceview

我正在编写一个 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/

相关文章:

swing - 将滚动条/滚动 Pane 添加到具有多个 jpanels 的 jframe

android - SurfaceView 与自定义 View (从 View 扩展)。 SurfaceView 比较慢,为什么?

java - ArrayAdapter 帮助,使用从方法返回的字符串数组填充

javascript - 有没有办法在不同的滚动点改变不同的图像?

css - 固定列,在导航栏下 - css

android - 如何将标准滚动条添加到 SurfaceView?

java - 在Android中,何时在SurfaceView中创建的线程被销毁?

Android Wear - 在没有 WearableListenerService 的情况下接收来自 Wear 的消息?

单选中的android图像

android - 从 SQLite 数据库中获取当前日期到上个月日期之间的数据