2009-07-08 91 views
11

我正在編寫一個android應用程序,該應用程序可以生成640 * 480像素的離屏位圖,並將其顯示在SurfaceView中。請注意,圖像的尺寸大於手機上的實際顯示。Android SurfaceView滾動

應用程序的工作方式是,它最初顯示的圖像的左上角(0,0),然後我希望能夠在圖片周圍滾動。

我Surfaceview類實現onMeasure回調並返回一個大小爲1024×768,顯示對應於手機屏幕上的圖像的區域。我想實現對滾動的支持,由於文檔非常有限(只有一堆類和沒有一致性的調用),我發現它幾乎不可能實現。我試過只是調用scrollBy,並不起作用。

如果任何人有關於如何進行這個任何指針將不勝感激。

回答

6

一旦你開始使用一SurfaceView,你正在爲自己,你有像素的空白區域的世界,你是你自己吸引他們怎麼想。你自己做一切 - 這意味着你也需要自己實現滾動。這不是微不足道的,但也不是太難。

一種方式做到這一點如下: - 擴展SurfaceView和實施SurfaceHolder.Callback - 使用getHolder()的addCallback(這)抓取回調 - 使用OnTouch事件來實現滾動行爲(即響應時,從MotionEvent中提取x,y位置並適當設置偏移量)。

實現一個線程來處理圖像的更新。在網絡上有這樣的例子(抱歉 - 現在沒有任何東西)。

可替代地,使用離屏位圖,並經一個正常的ImageView繪製(大小的ImageView位圖的尺寸,並將其放置在一個滾動視圖)。


編輯:

看到這仍然是越來越意見,認爲這段時間以來,我已經實現併發布爲開放源代碼實現了一個框架一個小型圖書館,它可能是值得指出的上述功能(受到此處許多評論的啓發,等等)。它可以在Github上找到:https://github.com/micabyte/android_game

2

我只是解決了這個對於我自己的比賽,我的surfaceView是LunarLander例如通過谷歌的適應。

一切都只是我對我自己的私人位圖繪製​​與在doDraw方法我自己的私人畫布,然後複製它的一些在畫布上我使用的代碼下面給出的相同。

Rect src = new Rect(mScrollX, mScrollY, mScrollX+mSurfaceWidth, mScrollY+mSurfaceHeight); 
Rect dst = new Rect(0, 0, mSurfaceWidth, mSurfaceHeight); 
surfaceCanvas.drawBitmap (mLevelBitmap, src, dst, null); 

的矩形對象定義drawBitmap如何縮放/從源位圖(我的私人位圖)到目的地(我被賦予了doDraw()

mScrollX和Y是畫在畫布上變換像素將被顯示在矩形的左上角(相對於大型私人位圖)

mSurfaceWidth /高度將顯示

只要確保滾動值是可接受的RA內的矩形的大小nges [0,privateBitmapWidth-mSurfaceWidth]

自己更新滾動值,不過請您(例如在onTouchEvent()中)