百度地图SDK-地图选点

2017-02-18 - 2,623 Views - 0 Goods - Nothing

前言

好久没写新文章了...
想把最近用到的东西总结一下,就当是巩固了...

正文

最近在做的东西用到了百度地图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倍

这里附上一张网上偷来的不同设备dp-px关系表

转载请注明原文链接:首页 -> 学习记录 -> Android学习记录 -> 百度地图SDK-地图选点

FuZhou . FuJian

"Never start something you're not willing to finish"