SurfaceView blinkt bei Belastung schwarz

Habe ich eine Zeichnung app, die in etwa 2-5 Sekunden zum laden der Zeichnung für komplizierte Zeichnungen (geschieht über einen AsyncTask). Für eine bessere Benutzer-Erfahrung, während dieser Zeit habe ich flash die gespeicherte PNG-version von der Zeichnung habe ich aus dem app-Verzeichnis wie ein ImageViewund zeigen eine be - ProgressBar aufrufen setContentView() in der Aktivität Konstruktor:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
    android:id="@+id/flash"
    android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@color/note_bg_white"
        android:contentDescription="@string/content_desc_flash_img"
        android:focusable="false" />
<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="6dp"
        android:paddingLeft="6dp"
    android:paddingRight="6dp"
        android:gravity="bottom|center_vertical">
        <ProgressBar 
            style="?android:attr/progressBarStyleHorizontal"
    android:id="@+id/toolbar_progress"
    android:layout_width="match_parent"
    android:layout_height="18dp"
    android:gravity="bottom|center_vertical" />
    </RelativeLayout>
</FrameLayout>

Wenn die AsyncTask ist abgeschlossen, ich rufen Sie dann setContentView() wieder mit dem neuen layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">
    <com.my.package.DrawingCanvas
        android:id="@+id/canvas"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusable="true"
        android:background="#ffffff" />
</RelativeLayout>

Wenn ich mit einem einfachen Canvas Modell, das perfekt funktionierte, wie die benutzerdefinierte DrawingCanvas - View ziehen würde die Zeichnung auf dem Bildschirm auf der ersten onDraw() bevor Sie dem Benutzer angezeigt, aber jetzt mit der SurfaceView mit einer Zeichnung loop, ich sehe das layout geflasht, dann, wenn die Zeichnung geladen ist, ein schwarzer Bildschirm für etwa eine Sekunde, dann endlich die neue DrawingCanvas.

Ich gehe davon aus, dass der Grund ist im Zusammenhang mit dem start-up-Zeit von der Zeichnung loop-thread, und ich habe meine diesen von onDraw() im SurfaceViewund es wird genannt, aber die Leinwand erhältlich in onDraw() scheint nicht zu ziehen, um die SurfaceView. Ich habe auch versucht die Einstellung eine solide Farbe, hintergrund in der XML oben in der Hoffnung auf ein minimum zu zeigen einen weißen hintergrund, aber diejenigen, die scheinen nie zu dauern, beeinträchtigen, auch wenn es aus dem code.

Rat oder eine Erklärung was ich sehe mit dem schwarzen Bildschirm?

EDIT:

Ok, haben bestätigt, dass die onDraw() zeichnen des canvas, also Links mein zeichnen ops gab es auch in der Hoffnung, dass auf die erste Vorführung von SurfaceView, die der Benutzer sehen diese Zeichnungen wie in der regulären Leinwand-Umsetzung, und wenn die Zeichnung Faden gesponnen hatte, es würde überschreiben die Leinwand.

Allerdings, wenn ich klar die Zeichnung thread operations, sehe ich die onDraw () - Ergebnisse, aber wieder, NACH dem schwarzen Bildschirm blinken. Und wenn ich entfernen Sie die onDraw () - überschreibung vollständig, ich sehe immer noch den black flash und dann sehe ich das layout mit dem weißen hintergrund von XML.

So, es sieht aus wie, egal was, bin ich immer gehen, um zu sehen, der Bildschirm ist schwarz, außer vielleicht statt der Umstellung der layouts, die ich ändern Sie einfach die vorhandenen "flash" - layout, das bereits aktiv ist?

EDIT2:

Haben versucht, mit einer ViewStub so, ich kann Blasen die SurfaceView in den vorhandenen Anzeigen nach dem Hinweis geladen, aber das gleiche issu immer noch gilt. Als nahe als ich kann erzählen, es ist eine ansehnliche (~200ms) Verzögerung zwischen dem SurfaceView Konstruktor und Aufruf surfaceCreated() ausführen, aber nicht sicher, dass dies ist, wo der schwarze Bildschirm passiert, oder warum der Bildschirm gezeichnet wird schwarz...

EDIT3:

Mein letzten Versuch für heute schließt die SurfaceView transparent. Dies kombiniert mit dem verlassen der bestehende layout in platzieren und einfach das hinzufügen, um das layout über die ViewStub geführt hätte, eine funktionierende Lösung habe ich zwar nicht, aber dennoch, für ein Bruchteil einer Sekunde, wenn die SurfaceView ist laden blinkt der Bildschirm schwarz, bevor die SurfaceView wird gezeigt, wie transparent. Wenn jemand noch andere Ideen zu versuchen, bitte posten.

InformationsquelleAutor der Frage Paul Mennega | 2012-01-07

Schreibe einen Kommentar