前言
好久没写新文章了...
想把最近用到的东西总结一下,就当是巩固了...
正文
最近在做的东西用到了百度地图SDK,有个地图选点的需求,在这边记录一下踩过的坑
百度地图SDK配置之类的就不说了,官方文档有很详细的说明
首先在你的布局文件里加个基本的MapView
<com.baidu.mapapi.map.MapView
android:id="@+id/homeMap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
然后再setContentView()之前初始化百度地图sdk
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_set_home);
init();
setListener();
}
绑定控件,创建标记
private void init(){
mMapView=(MapView)findViewById(R.id.homeMap);
mMapView.showZoomControls(false);
baiduMap=mMapView.getMap();
createMarker();
}
// 创建bitmap耗资源,使用同一个bitmap无需重复创建
private void createMarker(){
Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.icon_home);
bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(bitmap);
}
设置事件监听
private void setListener(){
baiduMap.setOnMapLongClickListener(new BaiduMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
baiduMap.clear();//翻遍了开发文档,没发现有清除单个标记的方法,只能全清,有点不爽
OverlayOptions options=new MarkerOptions()
.position(latLng)
.icon(bitmapDescriptor)
.anchor(0.5f,-1);//设置锚点在底部
baiduMap.addOverlay(options);
Toast.makeText(SetHomeActivity.this,"纬度"+latLng.latitude+","+"经度"+latLng.longitude,Toast.LENGTH_SHORT).show();
}
});
}
在开发过程中遇到一个坑
就是标注的图标在手机上显示得太大,刚开始以为把图片分辨率调低就好,可是调低后图片清晰度大幅下降。然后又去查百度地图开发文档,发现里面没有设置标记大小的方法。然后又去打bitmap的主意,对bitmap进行缩放,终于是达到要求了。可是后来无意中发现 bitmap.getWidth()获得的宽度是原图宽度的3倍,这才想起来我直接把图片资源文件丢在drawable文件夹了。在mdpi设备上,1dp=1px;而在xxhdpi设备上,1dp=3px,而drawable文件夹默认对应的是mdpi(320x480)的设备,放到1080p的设备上原图刚好就被放大了3倍
Comments | Nothing