Ich habe das neue Fragment von Google Maps API v2 in einen View Pager integriert. Beim Scrollen vom Kartenfragment überlappt eine schwarze Ansicht die benachbarten Fragmente. Jemand hat gelöst?
Bearbeiten: Screenshot
public static class PagerAdapter extends FragmentPagerAdapter{
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Fragment pageFragment;
switch (position) {
case 0:
pageFragment = new TabAFragment();
break;
case 1:
pageFragment = new TabBFragment();
break;
case 2:
pageFragment = SupportMapFragment.newInstance();
break;
default:
pageFragment = null;
break;
}
return pageFragment;
}
}
GoogleMap
Objekt von der bekommstViewPager
? Ich habe wochenlang daran festgehalten. Wenn Sie die Frage nicht gut verstanden haben, schlagen Sie meine Frage nach, Sie finden meinen Beitrag. Bitte antworte.screen record
das Problem bei einem Vorgang nicht auftritt.Antworten:
Ich konnte verhindern, dass die schwarze Oberfläche nach dem Übergang zurückbleibt, indem ich eine weitere Ansicht mit transparentem Hintergrund oben auf der
ViewPager
Innenseite platzierte. AFrameLayout
:quelle
Hatte das gleiche Problem mit SlidingMenu und ViewPager. Ich habe festgestellt, dass die Steuerschaltflächen im Kartenfragment im linken Artefakt nicht schwarz sind. Ich habe das Problem gelöst, indem ich die
onCreateView()
Methode von überschrieben habeMapFragment (SupportMapFragment)
quelle
Google hat ein Update dafür veröffentlicht, jedoch nur für 4.1+ (Sie müssen keine neue Version von PlayServices herunterladen, sie haben ein serverseitiges Flag verwendet).
Folgendes verwende ich, um das Problem zu umgehen: Stellt sicher, dass Sie keine CPU-Zyklen auf Geräten> = 4.1 verschwenden
quelle
FixMapFragment mapFragment = (FixMapFragment) fragmentManager.findFragmentById(R.id.map);
und in der Layoutdatei :<fragment android:id="@+id/map" android:name="com.example.fragments.FixMapFragment" ...
. Soweit ich das beurteilen kann, flackert die Karte immer noch (Android 4.0.4).Meine Problemumgehung: Verwenden Sie die neue Snapshot-Oberfläche von GoogleMap und zeigen Sie beim Scrollen der Seite einen Snapshot der Karte an.
Hier ist mein Code zum Festlegen des Snapshots (er befindet sich im selben Fragment wie map, FragmentMap.java):
Wobei "mapFragment" mein SupportedMapFragment und "iv" eine ImageView ist (machen Sie es match_parent).
Und hier steuere ich die Schriftrolle:
Mein Fragment mit Karte (FragmentMap) befindet sich auf Position 1, daher muss ich den Bildlauf von Position 0 nach 1 und von Position 1 nach 2 steuern (die erste if-Klausel). "getRegisteredFragment ()" ist eine Funktion in meinem benutzerdefinierten FragmentPagerAdapter, in dem ich ein SparseArray (Fragment) namens "registerFragments" habe.
Wenn Sie also zu oder von Ihrer Karte scrollen, sehen Sie immer eine Momentaufnahme davon. Das funktioniert sehr gut für mich.
quelle
Ich hatte dasselbe Problem von schwarzem Bildschirm auf der Listenansicht Scrollen, i Karte Fragment wurde mit mit Listenansicht im gleichen Bildschirm i mit der Nutzung dieses Problem gelöst habe von der magischen Eigenschaft in xml , wo ich Liste Ansicht spreche nur wir setzen haben android: scrollingCache = "false". Mein Problem ist behoben. Versuchen Sie diese Eigenschaft, um Verzögerungen und Flackern in Ihren Karten zu vermeiden.
quelle
Sie haben nicht viele Details angegeben, daher kann ich nur so viel vorschlagen. Ich hatte ein ähnliches Problem, bei dem der Bildschirm zwischen den Ansichten im Pager flackerte. Es stellte sich heraus, dass die MapView beim ersten Wechseln zwischen Seiten aufgeblasen wurde.
Um klar zu sein, ich hatte 3 Seiten in meinem Pager und meine Karte war die letzte Seite.
Um dies zu lösen, stellte ich fest, dass beim Setzen der Anzahl der Off-Screen-Seiten auf 2 (dies funktionierte im obigen Fall) alle Ansichten auf einmal geladen wurden, als mein Fragment gestartet wurde.
Siehe http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit (int)
quelle
Es gibt noch eine Lösung für dieses Problem. Ich zeige MapFragment in einem anderen Fragment. Das MapFragment wird dynamisch zum FrameLayout hinzugefügt.
Die Lösung besteht darin, frameLayout.setVisibility (View.Visible) und frameLayout.setVisibility (View.Gone) zum Öffnen und Schließen von Ereignissen des Schiebemenüs zu verwenden. Es muss eine zusätzliche Ansicht hinzugefügt werden. Und der schwarze Bereich ist komplett verschwunden.
quelle
Keine der oben genannten Methoden hat bei mir funktioniert, nicht einmal andere, die ich anderswo gefunden habe. Schließlich habe ich eine Teillösung gewählt. Ich höre Seitenänderungen über den onPageChangeListener des ViewPagers ab und verstecke die Karte, wenn die Seite zu scrollen beginnt, und zeige sie ebenfalls wieder an, wenn sie nicht mehr scrollt. Ich habe auch eine weiße Ansicht hinzugefügt, die beim Scrollen angezeigt wird.
quelle
Kopieren Sie einfach mein benutzerdefiniertes Kartenfragment in Ihr Projekt. Und wenn Sie schwarze Linien mit ScrollView oben und unten auf Ihrem ScrollView-Android haben: fadingEdge = "none"
}}
quelle