Android 高德地图自定义定位图标的显示

Android 高德地图定位以及自定义定位图标的显示

由于高德地图中默认的定位图标是高德地图的logo,我这边想要换一种图标,就有了新的需求。

首先先设置定位相关信息

下面代码之前确认地图控件已经被初始化。

/**
     * set map info
     */
    private void setUpMapLocationMine() {
        mAmap.setLocationSource(mLocationSource);// setting location listener
        mAmap.getUiSettings().setMyLocationButtonEnabled(false);// 设置默认定位按钮是否显示 这里我这边有自定义的按钮,所以就不显示高德自带的了
        mAmap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
        mAmap.setMyLocationType(AMap.MAP_TYPE_NORMAL);
        // 设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(2000);
        // 获取一次定位结果: //该方法默认为false。
        mLocationOption.setOnceLocation(false);
        mLocationOption.setOnceLocationLatest(false);
        //设置是否允许模拟位置,默认为false,不允许模拟位置
        mLocationOption.setMockEnable(false);
        mlocationClient.setLocationOption(mLocationOption);
        mlocationClient.startLocation();
        // 如果要设置定位的默认状态,可以在此处进行设置
        myLocationStyle = new MyLocationStyle();
        // 如果可以就将用户的图片传到这个bitmap
       	myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.marker_scenic_spot_mine_location_icon));

        myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));// 设置圆形的边框颜色
        myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));// 设置圆形的填充颜色
        myLocationStyle.anchor(0.5f,0.576f); // 这个数值是根据我的图片显示的时候计算的,最好是0.5 0.5
//        myLocationStyle.strokeColor(Color.argb(19, 73, 190, 255));// 设置圆形的边框颜色 rgba(73, 190, 255, 19)
//        myLocationStyle.radiusFillColor(Color.argb(19, 73, 190, 255));// 设置圆形的填充颜色
        mAmap.setMyLocationStyle(myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)); // 类型是定位旋转当不居中显示
    }

这个是显示我的位置的图标,由于我的图标有范围就不需要圆形和填充圆形的布局了 所以我设置为0.
在这里插入图片描述
这个箭头朝上是因为定位有旋转的功能,如果箭头不是朝上就不准确,高德那边给的方向应该默认就是朝上的,然后根据朝上来根据手机旋转来旋转角度的。
上面通过MyLocationStyle中的myLocationIcon设置定位图片就可以正常的设置了定位的图片。

上面是初始化一些定位的信息,下面是定位中用到的一些监听:

	LocationSource mLocationSource = new LocationSource() {
        @Override
        public void activate(OnLocationChangedListener onLocationChangedListener) {
            mListener = onLocationChangedListener;
            if (mlocationClient == null) {
                mlocationClient = new AMapLocationClient(mContext);
                mLocationOption = new AMapLocationClientOption();
                mlocationClient.setLocationListener(mapLocationListener);
                mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
                mlocationClient.setLocationOption(mLocationOption);
                mlocationClient.startLocation();
            }
        }
        @Override
        public void deactivate() {
            mListener = null;
            if (mlocationClient != null) {
                mlocationClient.stopLocation();
                mlocationClient.onDestroy();
            }
            mlocationClient = null;
        }
    };

    AMapLocationListener mapLocationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation amapLocation) { // 定位信息有变动就会调用这个方法 正常情况会每两秒调用一次,因为上面设置是两秒更新一次
            if (mListener != null && amapLocation != null) {
                if (amapLocation != null && amapLocation.getErrorCode() == 0) { // 定位获取位置成功
                    mListener.onLocationChanged(amapLocation);// show system blue spot
                } else {
                  	if (GPSUtils.isOPen(mContext)){
                    	ToastUtils.showText(mContext, "定位失败,当前GPS信号弱");
                    } else {
                       	ToastUtils.showText(mContext, "定位失败,请打开GPS位置权限");
                   	}
                }
            }
        }
    };

以上就是定位需要用的全部。
高德地图小知识。共勉

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 高德地图 API 提供了定位功能,可以在地图上显示当前位置,并且可以实时更新位置信息。下面是基本的定位步骤: 1. 在 AndroidManifest.xml 文件中添加定位权限: ``` <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ``` 2. 在应用程序中添加 AMapLocationClient 实例: ``` AMapLocationClient mLocationClient = null; mLocationClient = new AMapLocationClient(getApplicationContext()); ``` 3. 设置定位参数: ``` AMapLocationClientOption mLocationOption = null; mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setInterval(2000); mLocationOption.setOnceLocation(true); mLocationClient.setLocationOption(mLocationOption); ``` 4. 开始定位: ``` mLocationClient.startLocation(); ``` 5. 在定位回调函数中处理定位信息: ``` public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { //定位成功 double latitude = aMapLocation.getLatitude();//获取纬度 double longitude = aMapLocation.getLongitude();//获取经度 //在地图上显示当前位置 LatLng location = new LatLng(latitude, longitude); aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 17)); aMap.addMarker(new MarkerOptions().position(location)); } else { //定位失败 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } ``` 以上就是基本的定位步骤,可以根据需要自定义定位参数和定位回调函数的处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值