Closed sergpalm closed 1 year ago
Не вполне понял описание проблемы: MapView добавляется в диалог? Не могли бы Вы описать проблему подробнее?
1 - создаю диалог (Dialog, AlertDialog, FragmentDialog) 2 - Выставляю R.layout.dialog + сбрасываю FLAG_DIM_BEHIND 3 - Видно окно диалога с 4 кнопками внизу
4 - На кнопку 1 -4 ставлю слушатель 5 - Нажимаю на кнопку 1 (для показа карты) 5.1 при Dialog или AlertDialog создаю mapView в нужном l LinearLaoyout mapview = new MapView(this); l.addView(mapview);
5.2 при FragmentDialog FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); ChildFragment1 childFragment1 = new ChildFragment1(); transaction.replace(R.id.fragment_container, childFragment1); transaction.commit(); 6 - карта рисуется, но до момента рисования видно что находится за диалоговым окном 7 - карта нарисовалась. 8 - нажимаю на кнопку 2 8.1 - если Dialog или AlertDialog l.removeAllViews(); 8.2 - если DialogFragment FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); ChildFragment2 childFragment2 = new ChildFragment2(); transaction.replace(R.id.fragment_container, childFragment2); transaction.commit();
Как поборот прозрачность блока с картой приотрисовке или при скрытии?
MainActivity
public void openMap(View view) {
ContainerDialogFragment dialogFragment = new ContainerDialogFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
dialogFragment.show(ft,"dialog");
}
ContainerDialogFragment
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
ChildFragment1 childFragment1 = new ChildFragment1();
transaction.replace(R.id.fragment_container, childFragment1);
transaction.commit();
ChildFragment1
MapKitFactory.setApiKey("*******");
MapKitFactory.initialize(getActivity());
View rootView = inflater.inflate(R.layout.page1, null);
mapview = (MapView)rootView.findViewById(R.id.mapview);
mapview.getMap().setMapLoadedListener(new MapLoadedListener() {
@Override
public void onMapLoaded(@NonNull MapLoadStatistics mapLoadStatistics) {
for(int i=0;i<mapview.getChildCount();i++) {
Log.d("fragment1", "onMapLoaded="+mapview.getChildAt(i).getClass().getSimpleName());
}
Log.d("fragment1", "onMapLoaded");
}
});
mapview.getMap().move(
new CameraPosition(new Point(55.751574, 37.573856), 11.0f, 0.0f, 0.0f),
new Animation(Animation.Type.SMOOTH, 0),
null);
return rootView;
Столкнулся с такой же проблемой. Создание нового Activity с Circular Reveal анимацией -> блок с картой отрисовывается моментально, как бы находится НАД всей анимацией и родителем view.
Ну мы победили проблему - мне бы хотелось услышать создателей яндексовых карт - как надо побеждать прозрачность карты
@sergpalm не могли описать ваше решение, спасибо!
/**
* Находим главный GLSurfaceView и делаем его z индекс - наверх (иначе на диалоге происходит мигание карты)
*/
private void initGL() {
GLSurfaceView platformGLView = null;
try {
Field f = MapView.class.getDeclaredField("platformGLView");
f.setAccessible(true);
if (f.get(mapview) instanceof GLSurfaceView) {
platformGLView = (GLSurfaceView) f.get(mapview);
platformGLView.setZOrderMediaOverlay(true);
platformGLView.setZOrderOnTop(true);
platformGLView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
platformGLView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
}
} catch (Exception e) {
Log.d(YandexMap.TAG, "initGL1", e);
e.printStackTrace();
}
Log.d(YandexMap.TAG, "initGL3="+platformGLView );
}
@sergpalm спасибо, в каком месте вы вызываете метод initGL()?
Где карта создается
mapview = new MapView(context);
mapview.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT,
1.0f
));
initGL();
Делаю диалоговое окно (пробывал Dialog, AlertDialog, FragmentDialog) Сбрасываю флаг FLAG_DIM_BEHIND (иначе карта темная). Создаю MapView или беру из существующего layout.
При отрисовке карты или при скрытии диалога видно то что находится за диалоговым окном, т.е. как будто карта становится прозрачной и видно все что находится под диалоговым окном. Такая же ситуация когда mapView ставится видимость GONE или когда один фрагмент в диалоге меняется на другой. Как это можно исправить?