7

Ich arbeite an einer Multimedia-Videoverarbeitungsanwendung für Android, und ich habe in ein bisschen ein Problem laufen. Ich benutze die FragmentPagerAdapter Klasse mit einer Reihe von verschiedenen Fragmenten für verschiedene Schritte der Videoverarbeitung.Android Surface verursacht Bildschirm flimmern

Meine erste Fragment enthält eine SurfaceView und eine MediaPlayer, die es zusammen mit verschiedenen Wiedergabesteuerungen einspeist. Mein Problem passiert, wenn ich von Fragment 1 (mit der SurfaceView) zu Fragment 2 wische (momentan leer). Wenn ich start() noch nicht aufgerufen habe, passiert nichts Ungewöhnliches und ich kann normalerweise zwischen den Fragmenten wischen. Sobald ich start() jedoch aufrufen, beginnt der gesamte Bildschirm zu blinken, wenn ich zum nächsten Fragment streichen, auch wenn ich die MediaPlayer im Ruhezustand gesetzt haben und es keine Frames SurfaceView Fütterung. Das einzige, was hält diese die Oberfläche der dritten Fragment durch Streichen mit dem Aufnahme Ansicht zerstört so zerstört die FragmentPagerAdapterFragment ein oder Verlassen der Anwendung über das Haus oder Zurück-Taste, um die Ansicht zerstört wird.

Ich kann nicht für das Leben von mir herausfinden, warum das passiert, anders als vielleicht der SurfaceView Rendering-Thread ist irgendwie störend mit dem Haupt-UI-Thread. Nichts Ungewöhnliches erscheint auch auf LogCat, also bin ich ein bisschen festgefahren. Ich betreibe ein Galaxy Nexus mit Android 4.1 als meine Testhardware.

Jede Hilfe wäre willkommen!

JT

UPDATE: Ich habe es geschafft, durch Überschreiben der setPrimaryItem() Methode in der FragmentPagerAdapter eine Abhilfe für jetzt zu finden, ein Verfahren zu nennen, die die SurfaceView aus der Hierarchie entfernt (removeView() auf seinem LinearLayout Behälter mit) Wenn der Videoplayer Fragment nicht mehr angezeigt wird und die SurfaceView wieder aktiviert wird, wenn sie wieder aktiv ist. Es ist immer noch ein wenig blinkend, wenn das passiert, leider, wenn jemand zusätzliche Gedanken hat, wäre ich dankbar!

+0

überprüfen. Ihr Problem ist ähnlich zu diesem: [Link] (http://stackoverflow.com/questions/8772862/surfaceview-flashes-black-on-load) – RATHI

Antwort

4

Vom Android Developers Blog

Dieses Widget [Surface] Werke ein neues Fenster hinter dem Anwendungsfenster platziert zu schaffen. Dann schlägt er ein Loch durch das Anwendungsfenster, um das neue Fenster zu öffnen.

Weil Inhalt eines Surface der lebt nicht in dem Fenster der Anwendung, es kann nicht umgewandelt werden (verschoben, skaliert, gedreht) effizient. Dies erschwert die Verwendung von SurfaceView in einer ListView oder ScrollView.

Die Lösung ist ein TextureView zu verwenden, wenn Sie für 4.0 oder höher bauen sind. Wenn youre interessiert einen TextureView im Umgang mit Video anzuzeigen this thread könnte hilfreich sein, diese Antwort

+0

Super Antwort .... Ich verbrachte meine 1 Woche, um dieses Problem zu lösen. .... endlich SurfaceView/VideoView entfernt und TexturView benutzt. –