Re: [問題] 如何控制 Google Map 圖層圖示大小

看板AndroidDev作者 (這世界還是有好人的)時間13年前 (2011/07/28 22:15), 編輯推噓5(503)
留言8則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《seraphim6 (伏爾加)》之銘言: : Google Map 中增加的圖示能否一起跟著地圖縮放? : http://nopaste.info/7035adbb67.html : 目前只作到貼圖片到Google地圖上面 : 想請教一下 : 想要增加在地圖上面的圖片能夠跟著mapView一起被放大縮小(Zoom in/out) : 函式庫中有沒有可以作到控制圖片大小的功能? : 謝謝! 不好意思讓各位等了這麼久,昨天我看到這個問題,感覺我好像有測試過, 有一點小心得,就和大家分享一下,也希望有更好的做法可以提出來! 這個範例適用於同一個圖示的marker,不同位置用不同圖片要等我這禮拜六日有時間 再分享,因為明天要去java 2大會。 因為bbs的排版很難搞,所以在這邊我就講關鍵的部分,想要看比較詳細的內容 可以連到小弟的網誌看:http://tericky.blogspot.com/2011/07/android-mapview.html 首先是圖片層: 重點在於怎麼去變換圖片大小,因為Drawable不允許直接變更圖片或是大小,所以每次 都要重新生成。 所以第一步就是在ItemizedOverlay<OverlayItem>建構時,super規定要傳入 defaultMarker時,先用一個全域變數(mDrawable)把他存起來,供日後使用 接著在protected OverlayItem createItem(int i) {} 中,要寫 OverlayItem.setMarker(mDrawable);讓他每次都去設定圖片。 順便一提,如果setMarker(null),好像是設定回原本defaultMarker的圖案。 接著Override draw(Canvas canvas, MapView mapView, boolean shadow) 在裡面去設定縮放率,並且呼叫ItemizedOverlay去重新載入OverlayItem public void draw(Canvas canvas, MapView mapView, boolean shadow) { // 計算縮放率,記得一定要 > 0 float scale = 1 - (mBaseLevel - mapView.getZoomLevel()) * mLevelRate; // 當比例不一樣的時候,再做設定,避免無謂的資源浪費 if (mScale != scale && scale > 0) { // 計算縮放後的長寬,一定要 >= 1,因為 < 1,轉成int後,就會是0, // 這樣就會錯誤 float scaleWidth = mOriginalBmp.getWidth() * scale; float scaleHeight = mOriginalBmp.getHeight() * scale; Bitmap newbmp = Bitmap.createScaledBitmap(mOriginalBmp, (int) scaleWidth, (int) scaleHeight, true); mDrawable = boundCenterBottom(new BitmapDrawable(mContext.getResources(), newbmp)); // 更新OverlayItem前,先把focus移走,不然會出錯 setLastFocusedIndex(-1); // 通知ItemizedOverlay更新OverlayItem populate(); // 儲存新的縮放率 mScale = scale; } super.draw(canvas, mapView, shadow); } 這樣就完成了 ^^b ,程式碼可以到下面這個網址下載,記得要置換mapView的key http://dl.dropbox.com/u/16142040/AndroidCodeShare/androidTest.rar -- 這篇打了一個多小時 我是覺得每次都要重新製造一個bitmap跟drawable很浪費資源 我昨天有測試直接對draw的canvas去做scale 雖然圖片可以縮放,但是位置也變了 >"< 之後因為iPhone那邊案子比較吃重,我就沒有時間再研究了 有更好的想法歡迎跟我說 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.21.235 ※ 編輯: tericky 來自: 122.117.21.235 (07/28 22:20)

07/28 22:50, , 1F
先推推推!
07/28 22:50, 1F

07/28 22:52, , 2F
推阿
07/28 22:52, 2F

07/28 22:59, , 3F
看完以後我還是覺得我不要做這種浪費資源的事情好了~
07/28 22:59, 3F

07/28 23:01, , 4F
我還是好好研究一下怎麼在地圖上畫Polygon好了
07/28 23:01, 4F

07/28 23:21, , 5F
謝謝!!推推
07/28 23:21, 5F

07/28 23:53, , 6F
真的是太謝謝了!!原本我是想要把設定縮放MapView的
07/28 23:53, 6F

07/28 23:54, , 7F
setBuiltInZoomControls方法來同樣操作圖層的圖,沒想到
07/28 23:54, 7F

07/28 23:55, , 8F
t大直接自己寫了 >"< 謝謝!!
07/28 23:55, 8F
文章代碼(AID): #1ECMxsU5 (AndroidDev)
文章代碼(AID): #1ECMxsU5 (AndroidDev)