2017-08-04 2 views
0

Ich versuche, eine Ansicht auf eine Bitmap zu speichern, ohne darauf zu warten, dass sie gerendert wird. Ich bitte die Wiedergabe eines RecyclerView und dann tun:Wann ist eine Leinwand gefüllt?

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Config.ARGB_8888); 
View view = activity.findViewById(R.id.my_view); 
view.draw(new Canvas(bitmap)); 

Aber wenn ich die Bitmap speichern sofort wird es leer sein, weil die Ansichten in unter meiner Recycler Ansicht noch gezogen werden, denke ich. Ich müde mit der ViewTreeObserver und eine OnGlobalLayoutListener hinzufügen, aber das Problem bestand - dieser Rückruf wird zu früh aufgerufen.

Wie kann ich zuverlässig warten, bis die Bitmap/Leinwand gefüllt ist? Gibt es dafür einen spezifischen Rückruf?

PS: keine hart codierte Verzögerungen erlaubt :)

Antwort

0

Ein guter Ansatz ist es, die RecyclerView onMeasure Methode, außer Kraft zu setzen und die Breite/Höhe Werte erhalten, wenn sie 0 sie gerade erstellt werden, wenn sie größer sind, Hast du OnDraw, nachdem die Messung beendet wurde?

+0

Dies ist ein Test und ich aktualisiere das RecyclerView ständig mit neuen Kindern, die in jeder Iteration eine Bitmap speichern. Würde dieser Ansatz nicht nur für die erste Iteration funktionieren, wenn die Recycler-Ansicht noch nicht erstellt wurde? –

+0

ja, andere Herangehensweise ist zu verifi in onDraw wenn Größe = 0,0, wenn nicht das Ergebnis drucken –

Verwandte Themen