2013-03-25 58 views
2

我想開發一個android應用程序以顯示可縮放,可平移的地圖(它只是一個位圖圖像),該應用程序還允許用戶單擊某些點地圖。在Surfaceview中在畫布上顯示位圖

我很努力地找到實現這樣的應用程序的最有效的方法。在嘗試了很多其他方法(包括Webviews,OpenLayers)之後,最好的方法是(至少根據這個網站),似乎在使用一個帶有Canvas的SurfaceView。我目前使用的代碼是通過互聯網上發現的代碼片段拼湊在一起的,所以它只是崩潰。我已經包括它希望在這裏反正它給了什麼,我想實現一些想法:

public class Main extends Activity { 

private Bitmap bmp; 
    private SurfaceView surfaceView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     surfaceView = (SurfaceView)findViewById(R.id.surface); 
     bmp = BitmapFactory.decodeResource(getResources(), 
      R.drawable.testmapbmp); 
     //decode the bitmap file 

     Canvas canvas = new Canvas(bmp); 
     //create a canvas from the bitmap, then display it in surfaceview 
     surfaceView.draw(canvas); 
    } 
} 

這是爲了實現我的應用程序需要的功能的最佳方式?或者還有更好的方法,特別是如果稍後可能遇到問題,例如實施地圖的可點擊部分。

我真的需要以前曾經創造類似的東西的幫助,所以我可以在問題上得到我的思路,但是我非常感謝任何幫助/指針/提示!

謝謝

回答

2

你的一段代碼是不是真的正確。

Usualy如果你想做這樣的事情,你需要創建自己的自定義視圖(通過繼承View或SurfaceView)。在您的View子類中,您需要重寫方法onDraw(Canvas)並使用canvas方法在畫布上繪製位圖。

爲了使它可以pannable和pinch-zoomable你需要使用ScrollerScaleGestureDetector類。通常平移或縮放是通過使用方法(旋轉,縮放,平移)將仿射變換應用於畫布來完成的。

SurfaceView和View之間的區別在於,在SurfaceView中,您可以直接從單獨的線程中繪製,這意味着您可以在那裏組織一些渲染循環並從中繪製。這對於簡單的遊戲和動畫效果非常有用。我相信,爲了繪製位圖的目的,這是矯枉過正的,並且子類View更簡單。

我會從thisthis開始,如果我是你的話。

+0

謝謝!這有很大幫助! – logicalfox 2013-03-25 14:30:03