作者tericky (这世界还是有好人的)
看板AndroidDev
标题Re: [问题] 如何控制 Google Map 图层图示大小
时间Thu Jul 28 22:15:14 2011
※ 引述《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)
1F:推 laiis:先推推推! 07/28 22:50
2F:推 tomap41017:推阿 07/28 22:52
3F:推 lovelycateye:看完以後我还是觉得我不要做这种浪费资源的事情好了~ 07/28 22:59
4F:→ lovelycateye:我还是好好研究一下怎麽在地图上画Polygon好了 07/28 23:01
5F:推 kdkdlove:谢谢!!推推 07/28 23:21
6F:推 seraphim6:真的是太谢谢了!!原本我是想要把设定缩放MapView的 07/28 23:53
7F:→ seraphim6:setBuiltInZoomControls方法来同样操作图层的图,没想到 07/28 23:54
8F:→ seraphim6:t大直接自己写了 >"< 谢谢!! 07/28 23:55