Получить ссылку на кнопку моего местоположения в наборе карт Huawei

Я использую Huawei MapKit и хочу добавить свой пользовательский MyLocationButton, но я не хочу использовать диспетчер местоположений, чтобы получить свое местоположение и перейти к нему, я просто хочу huaweiMapMyLocationButton.performClick(), например, с картами Google я могу сделать это

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

Я хочу что-то подобное для карт huawei, я смог просмотреть дочерние элементы представления карты, и я нашел представления настроек пользовательского интерфейса (масштаб, компас, местоположение) и, следуя местоположению, я смог получить это:

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)

Но это не сработало

2
0
317
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Слой MapView, который вы использовали в HUAWEI Map Kit, неверен. Нет необходимости анализировать карту на основе слоя 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);
            }
        }
}

Спасибо, это очень помогло, но. Я не использую MabView, поэтому вместо этого я использовал обычное свойство view во фрагменте, так что это похоже на view?.let{dumpMapViewClickLocationBtn(it,"location")}

Mohamed Hamdy 13.12.2020 08:55

В классе HuaweiMap.class есть функция с именем moveCamera(CameraUpdate var1). так что есть другой способ:

  1. получить широту и долготу текущего местоположения
  2. используйте функцию moveCamera в обратном вызове onMapReady()
public void onMapReady(HuaweiMap map) {   
map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(48.893, 2.334),10));
}

(48.893, 2.334) замените на расположение устройства.

Другие вопросы по теме