2

我正在使用华为 MapKit,我想添加我的自定义MyLocationButton,但我不想使用位置管理器来获取我的位置并移动到它,我只想huaweiMapMyLocationButton.performClick(),例如,使用谷歌地图我可以做到这一点

val locationButtonParent = view?.findViewById<View>(Integer.parseInt("1"))?.parent as? View?
val locationButton = locationButtonParent?.findViewById<View>(Integer.parseInt("2"))
locationButton.performClick()

我想要华为地图这样的东西,我能够通过地图视图的子视图,我找到了 ui 设置视图(缩放、指南针、位置)并按照我能够得到的位置:

val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
val fragmentView = mapFragment.view    
val myLocationButton =
            ((((fragmentView as ViewGroup).getChildAt(0) as ViewGroup).getChildAt(1) as ViewGroup).getChildAt(
                1
            ) as ViewGroup).getChildAt(0)

但这没有用

4

2 回答 2

1

HuaweiMap.class 中有一个名为 moveCamera(CameraUpdate var1) 的函数,因此还有另一种方法:

  1. 获取当前位置的经度和纬度
  2. 在 onMapReady() 的回调中使用函数 moveCamera
public void onMapReady(HuaweiMap map) {   
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(48.893, 2.334),10));
}

(48.893, 2.334) 替换为设备位置。

于 2021-01-21T01:53:25.400 回答
1

您在 HUAWEI Map Kit 中使用的 MapView 图层不正确。无需根据 Google 的图层解析地图。请尝试使用以下代码测试implementation' com.huawei.hms:maps:5.0.5.301 '并添加自定义的MyLocationButton.

//...
                MapView mapView = mMapView;
                dumpMapViewClickLoctionBtn(mapView, "location");
        }
    }

    private void dumpMapViewClickLoctionBtn(ViewGroup viewGroup, String id) {
        for (int j = 0; j < viewGroup.getChildCount(); j++) {
            View view = viewGroup.getChildAt(j);
            if (view.toString().contains(id)) {
                view.performClick();
            }
            if (view instanceof ViewGroup) {
                ViewGroup v = (ViewGroup) view;
                dumpMapViewClickLoctionBtn(v,id);
            }
        }
}
于 2020-12-11T10:55:00.080 回答