SupportMapFragment в Nexus One

У меня возникли проблемы при смешивании старого Google Nexus One с новым SupportMapFragment.

В определенном пейзажном режиме у меня есть HorizontalScrollView с картой и некоторой информацией так, что вам нужно прокручивать, чтобы увидеть информацию .

Проблема в том, что прокрутка делает (почему-то я не могу понять прямо сейчас) фон SupportMapFragment видимым (который по умолчанию кажется черным), в то время как на самом деле прокручивается весь вид.

Картинка, чтобы показать, что я имею в виду.

Демонстрация поведения

Хотя это и не та же самая проблема, есть аналогичная ошибка, о которой сообщается в проблемы gmaps-api


Итак, что я протестировал на данный момент:

  • Установка фона на @color/transparent, даже в XML и/или программно.
  • Изменение SupportMapFragment z-порядка

Установка этого кода перед вызовом моей карты:

GoogleMapOptions op = new GoogleMapOptions();
op.zOrderOnTop(true);
SupportMapFragment.newInstance(op);

Так что у меня закончились идеи. Я успешно протестировал тот же точный код в:

  • Galaxy Nexus
  • HTC Desire HD
  • Samsung Galaxy S3
  • Samsung Galaxy Mini
  • Galaxy Ace

РЕДАКТИРОВАТЬ: Интересно то, что скриншот заставил меня понять, что невозможно зафиксировать мой конкретный случай. Когда был сделан снимок экрана, ошибку можно было воспроизвести, только снова переключившись на портретную и альбомную ориентацию.

Есть идеи? Я пропустил что-то очевидное?

Заранее благодарю за ваши комментарии.


person Eloi Navarro    schedule 23.01.2013    source источник
comment
Этот пост звучит похоже, поэтому может помочь   -  person iagreen    schedule 23.01.2013


Ответы (2)


У меня была очень похожая проблема, но когда я добавлял библиотека SlidingMenu, и я исправил ее с помощью хака в этом комментарии

public class MyMapFragment extends SupportMapFragment() {

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View view = super.onCreateView(inflater, container, savedInstanceState);
       setMapTransparent((ViewGroup) view);
       return view;
   };

   private void setMapTransparent(ViewGroup group) {
       int childCount = group.getChildCount();
       for (int i = 0; i < childCount; i++) {
       View child = group.getChildAt(i);
       if (child instanceof ViewGroup) {
           setMapTransparent((ViewGroup) child);
       } else if (child instanceof SurfaceView) {
           child.setBackgroundColor(0x00000000);
       }
   }
 }
person Robert Estivill    schedule 23.01.2013

Просто добавлю к ответу Роберта Эстивилла: вероятно, лучше не запускать код на устройствах >= 4.1, так как с ними проблем нет.

Слегка измененная версия:

public class FixMapFragment extends SupportMapFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);

        // Fix for black background on devices < 4.1
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN){
            setMapTransparent((ViewGroup) view);
        } 
        return view;
    }

    private void setMapTransparent(ViewGroup group) {
        int childCount = group.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = group.getChildAt(i);
            if (child instanceof ViewGroup) {
                setMapTransparent((ViewGroup) child);
            } else if (child instanceof SurfaceView) {
                child.setBackgroundColor(0x00000000);
            }
        }
    }
}

Я бы поместил это в комментарий, но мне не хватает репутации

person Tspoon    schedule 19.10.2013