Saya akan mencoba menjelaskan apa yang harus saya lakukan.
Saya memiliki 3 layar terpisah yang mengatakan A, B, C. Ada layar lain yang disebut say HomeScreen di mana semua 3 layar bitmap harus ditampilkan dalam tampilan Galeri dan pengguna dapat memilih tampilan mana yang ingin ia tuju.
Saya sudah bisa mendapatkan Bitmap dari semua 3 layar dan menampilkannya dalam tampilan Galeri dengan menempatkan semua kode dalam Kegiatan HomeScreen saja. Sekarang, kode ini sangat rumit dan saya ingin menyederhanakannya.
Jadi, bisakah saya memanggil Aktivitas lain dari HomeScreen dan tidak menampilkannya dan hanya mendapatkan Bitmap dari layar itu. Sebagai contoh, katakan saya hanya memanggil HomeScreen dan itu memanggil Aktivitas A, B, C dan tidak ada Kegiatan dari A, B, C yang ditampilkan. Itu hanya memberikan Bitmap dari layar itu dengan getDrawingCache (). Dan kemudian kita bisa menampilkan bitmap itu dalam tampilan Galeri di Layar Beranda.
Saya harap saya telah menjelaskan masalahnya dengan sangat jelas.
Tolong beri tahu saya jika ini benar-benar mungkin.
Jawaban:
ada cara untuk melakukan ini. Anda harus membuat Bitmap dan Canvas dan memanggil view.draw (canvas);
ini kodenya:
jika tampilan tidak ditampilkan sebelum ukurannya akan menjadi nol. Mungkin untuk mengukurnya seperti ini:
EDIT: sesuai dengan posting ini , Melewati
WRAP_CONTENT
sebagai nilai untukmakeMeasureSpec()
tidak melakukan hal yang baik (walaupun untuk beberapa kelas tampilan itu berfungsi), dan metode yang disarankan adalah:sumber
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
ini berfungsi dengan benar, tapi terima kasih untuk kodenya :)v.measure(0, 0); v.getMeasuredWidth(); v.getMeasuredHeight();
.Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Bekerja lebih baikinilah solusi saya:
Nikmati :)
sumber
Coba ini,
sumber
Saya tahu ini mungkin masalah basi, tetapi saya mengalami masalah dalam membuat solusi ini bekerja untuk saya. Secara khusus, saya menemukan bahwa jika ada perubahan yang dilakukan pada tampilan setelah digelembungkan bahwa perubahan itu tidak akan dimasukkan ke dalam bitmap yang diberikan.
Inilah metode yang akhirnya berhasil untuk kasus saya. Namun, dengan satu peringatan. sebelum menelepon
getViewBitmap(View)
saya meningkatkan pandangan saya dan memintanya untuk tata letak dengan dimensi yang diketahui. Ini diperlukan karena tata letak tampilan saya akan membuatnya nol tinggi / lebar sampai konten ditempatkan di dalam."Saus ajaib" untuk saya ditemukan di sini: https://groups.google.com/forum/#!topic/android-developers/BxIBAOeTA1Q
Bersulang,
Retribusi
sumber
measure()
danlayout()
sebelum saya mengisi pandangan saya jadi saya punya hasil yang aneh. Memindahkan panggilan-panggilan ini ke bawah,createBitmap()
tetap memperbaiki untuk saya!Ada fungsi ekstensi Kotlin yang hebat di Android KTX:
View.drawToBitmap(Bitmap.Config)
sumber
Semoga ini membantu
getDrawingCache()
Metode pembaruan sudah tidak digunakan lagi di API level 28. Jadi cari alternatif lain untuk level API> 28.sumber
getDrawingCache
saat ini sudah tidak digunakan lagi.Layout atau view to bitmap:
Metode Panggilan:
sumber
Saya pikir ini sedikit lebih baik:
Menggunakan kode di atas, Anda tidak perlu menentukan ukuran bitmap (gunakan 0 untuk lebar & tinggi) jika Anda ingin menggunakan salah satu tampilan itu sendiri.
Juga, jika Anda ingin mengonversi tampilan khusus (SurfaceView, Surface atau Window) ke bitmap, Anda sebaiknya mempertimbangkan menggunakan kelas PixelCopy . Ini membutuhkan API 24 dan lebih tinggi. Saya tidak tahu bagaimana melakukannya sebelumnya.
sumber
sumber