Streaming-Videoliste mit Exoplayer

8

Ich möchte die Streaming-Videoliste-App implementieren. Ich habe RecyclerView verwendet, um mein Listenelement anzuzeigen. Der Artikeltyp enthält 4 Typen: Artikel, Status, Foto und Video. Wir sollten uns nur auf den Videotyp konzentrieren. Hier ist mein Code für den RecyclerView-Adapter:

%Vor%
  • Wenn der Elementtyp Video ist, erstelle ich eine ExoPlayer -Instanz, um dieses Video abzuspielen, und füge diese Instanz zu einem HashMap zur späteren Verwendung hinzu (mit Schlüsselwert ist die Position des Elements). Wenn ein Videoartikel recycelt wird, lasse ich den Player los und entferne ihn aus HashMap .

  • Alles sieht gut aus, aber ein Problem. Ich nehme an, der Videogegenstand ist auf Position 0 (jetzt können wir die Videovorschau in diesem Artikel sehen). Ich scrolle das RecyclerView gerade so weit runter, dass das Element 0 nicht angezeigt wird. In diesem Moment ist der VideoViewHolder von Element 0 noch nicht recycled. Dann scrolle ich nach oben, um Punkt 0 anzuzeigen. Die Ansicht ist jetzt leer, die Videovorschau wird nicht angezeigt. Ich klicke auf Punkt 0, um das Video abzuspielen, der Player spielt nur Audio (Ton) ab, kein Video. Nach ein paar Sekunden ist das Video nun sichtbar.

  • Ich debuggte und fand heraus, dass nach dem Scrollen nach unten, um das Videoobjekt auszublenden, SurfaceView zerstört wurde. Wenn Sie nach oben scrollen, um ein Videoelement anzuzeigen, wird SurfaceView erstellt. Ich denke, das ist der Grund, warum VideoViewHolder anstelle der Videovorschau eine leere Ansicht zeigt.

  • Hier ist meine Frage: Wie kann ich die Videovorschau anzeigen, nachdem ich zum Videoelement zurückgeblättert bin?

Nguyễn Hoàng Lâm 11.01.2016, 08:01
quelle

1 Antwort

0

Hier ist ein Hinweis von der ExoPlayer Dokumentation

  

Das SurfaceView-Rendering wurde nicht ordnungsgemäß mit Ansichtsanimationen bis Android N synchronisiert. Bei früheren Releases konnte dies zu unerwünschten Effekten führen, wenn ein SurfaceView in einen Scroll-Container platziert wurde oder wenn es einer Animation unterzogen wurde. Solche Effekte beinhalteten, dass der Inhalt des SurfaceView etwas hinter der Stelle, an der er angezeigt werden sollte, zurückblieb und dass die Ansicht bei Animation schwarz wurde.

     

Um eine reibungslose Animation oder das Scrollen von Videos vor Android N zu erreichen, ist es notwendig, dass Sie TextureView und nicht SurfaceView verwenden. Wenn keine sanfte Animation oder Scrolling erforderlich ist, sollte SurfaceView bevorzugt werden

Um TextureView surface_type zu aktivieren, müssen Sie es in Ihrer XML-Datei wie unten gezeigt setzen

%Vor%     
Volodymyr Khodonovych 22.02.2017 12:20
quelle