95 votes

ViewPager avec l’API Google Maps v2 : vue noir mystérieux

J’ai intégré le nouveau google mappe api v2 fragment dans un pagineur de la vue. Lors du défilement du fragment de la carte, une vue noire chevauche les fragments adjacents. Quelqu'un a résolu ?

Edit : capture d’écran

enter image description here

114voto

Jeff Gilfelt Points 15494

J’ai été en mesure d’arrêter la surface noire laissée pour compte après passage en plaçant un autre vue avec un arrière-plan transparent sur le dessus de la à l’intérieur d’un :

43voto

Lubos Horacek Points 563

Eu le même problème avec SlidingMenu et ViewPager. J’ai remarqué que les boutons de commande dans le fragment de carte ne sont pas noirs à gauche derrière l’artefact. J’ai résolu le problème en substituant la méthode de

7voto

Tspoon Points 358

Google a publié un correctif pour cela, mais seulement pour 4.1 + (vous n’avez pas besoin de télécharger une nouvelle version de PlayServices, ils ont utilisé un drapeau du côté serveur)

Voici ce que j’utilise pour contourner le problème - assure que vous ne perdez aucun cycle de CPU sur les périphériques > = 4.1

6voto

Namenlos Points 546

Ma solution: faire usage de la nouvelle snapshot de l'interface de GoogleMap et afficher un aperçu de la carte pendant le défilement de la page.

Voici mon code pour le réglage de l'instantané (c'est dans le même fragment comme carte, appelée FragmentMap.java):

public void setSnapshot(int visibility) {
    switch(visibility) {
    case View.GONE:
        if(mapFragment.getView().getVisibility() == View.VISIBLE) {
            getMap().snapshot(new SnapshotReadyCallback() {
                @Override
                public void onSnapshotReady(Bitmap arg0) {
                    iv.setImageBitmap(arg0);
                }
            });
            iv.setVisibility(View.VISIBLE);
            mapFragment.getView().setVisibility(View.GONE);
        }
        break;
    case View.VISIBLE:
        if(mapFragment.getView().getVisibility() == View.GONE) {
            mapFragment.getView().setVisibility(View.VISIBLE);
            iv.setVisibility(View.GONE);
        }
        break;
    }
}

Où "mapFragment" est mon SupportedMapFragment et "iv" est une ImageView (faire match_parent).

Et ici, je suis contrôler le défilement:

pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if(position == 0 && positionOffsetPixels > 0 || position == 1 && positionOffsetPixels > 0) {
                ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.GONE);
            } else if(position == 1 && positionOffsetPixels == 0) {
                ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.VISIBLE);
            }
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {}
        @Override
        public void onPageSelected(int arg0) {}
    });

Mon fragment avec la carte (FragmentMap) est sur la position 1, donc j'ai besoin pour contrôler le défilement de la position 0 à 1 et à partir de la position 1 à 2 (le premier si la clause). "getRegisteredFragment()" est une fonction dans ma personnalisé FragmentPagerAdapter, en qui j'ai une SparseArray(Fragment) appelé "registeredFragments".

Donc, chaque fois que vous faites défiler jusqu'à ou à partir de votre carte, vous voyez toujours un instantané. Cela fonctionne très bien pour moi.

4voto

Priyank Bhojak Points 628

J’ai eu le même problème d’écran noir le défilement de l’affichage de la liste, j’utilisais un fragment de la carte avec affichage de la liste, dans le même écran, j’ai résolu ce problème avec l’utilisation de la propriété magique en xml où je suis parler affichage de liste, il faut juste mettre android : scrollingCache = « false ».ma question est fixé essayer cette propriété d’arrêter à la traîne et scintillement dans vos cartes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X