Ich habe eine Qt 5.6.0 Anwendung auf Android mit einem QQuickView mit transparentem Hintergrund, die einige qml und eine reine Android SurfaceView, die ein Video im Hintergrund anzeigen soll zeichnen.Android: Zeichnen qml in SurfaceView mit ZOrderMediaOverlay
Beim Start ist alles gut. Mein Video wird im Hintergrund wiedergegeben und meine qml-Komponenten werden im Vordergrund angezeigt.
Mein Problem ist, wenn meine Aktivität pausiert ist dann wieder, jedes Mal, wenn das Video von meinem Qml oben angezeigt wird. Nach Forschung denke ich, ist es, weil das SurfaceView, das von Qt erzeugt wird, um das qml anzuzeigen, und mein SurfaceView, das geschaffen wird, um das Video anzuzeigen, in der gleichen "z Bereich" sind. Die Renderreihenfolge ist also nicht definiert.
Ich möchte die Qt SurfaceView in den ZOrderMediaOverlay Bereich verschieben, indem ich das ZOrderMediaOverlay auf true setze, aber ich muss es bei der Erstellung von SurfaceView einstellen.
Gibt es eine Möglichkeit, meine z-Reihenfolge direkt aus C++ zu setzen, wenn ich meine QQuickView erstelle? Oder gibt es einen anderen Weg?
Ich habe eine benutzerdefinierte Aktivität, die von QtActivity erbt, aber die SurfaceView ist noch nicht in der OnCreate-Funktion erstellt. Ich kann auf die Qt SurfaceView zugreifen, wenn ich meine SurfaceView für Video erstelle, aber die Qt's ist bereits erstellt und die ZOrderMediaOverlay hat keine Wirkung.
Vielen Dank für Ihre Hilfe :)
Edit: auf den Quellcode in Bezug auf, einfach die Flagge des QQuickView gesetzt Qt :: WindowStayOnTopHint auf true sollte die Oberfläche schaffen mit ZOrderMediaOverlay auf true gesetzt, aber es scheint nicht, arbeiten. Die Videooberfläche wird nach dem Fortsetzen über die qml-Oberfläche gezogen, bis die Videooberfläche zerstört und neu erstellt wurde.