Adakah yang mau mencoba menjelaskan kepada saya mengapa
public void addView(View child) {
child.setDrawingCacheEnabled(true);
child.setWillNotCacheDrawing(false);
child.setWillNotDraw(false);
child.buildDrawingCache();
if(child.getDrawingCache() == null) { //TODO Make this work!
Log.w("View", "View child's drawing cache is null");
}
setImageBitmap(child.getDrawingCache()); //TODO MAKE THIS WORK!!!
}
SELALU mencatat bahwa cache gambar adalah nol, dan menyetel bitmap ke nol?
Apakah saya harus benar-benar menggambar tampilan sebelum cache disetel?
Terima kasih!
getDrawingCache()
penggunaanView#draw
untukCanvas
pendekatanJawaban:
Saya juga mengalami masalah ini dan menemukan jawaban ini:
sumber
jika
getDrawingCache
selalureturning null
guys: gunakan ini:Referensi: https://stackoverflow.com/a/6272951/371749
sumber
getLayoutParams
alih-alih v.getWidth () dan v.getHeight ()?ImageView
belum menerima gambar, jadi tampaknya 0. Ini akan bermain berbeda untuk kode orang yang berbeda, tapi pastikan panggilan Anda keloadBitmapFromView()
pasti setelah AndaImageView
berisi gambar.Alasan dasar seseorang mendapatkan null adalah karena view tidak berdimensi. Semua upaya kemudian, menggunakan view.getWidth (), view.getLayoutParams (). Width, dll., Termasuk view.getDrawingCache () dan view.buildDrawingCache (), tidak berguna. Jadi, Anda harus terlebih dahulu menyetel dimensi ke tampilan, misalnya:
(Anda telah mengatur 'width' dan 'height' sesuka Anda atau mendapatkannya dengan WindowManager, dll.)
sumber
Saya menggunakan ini sebagai gantinya.
sumber
Kerja terbaik 4me
sumber
Jika tampilan yang Anda inginkan menangkap benar-benar muncul di layar, tetapi mengembalikan null. Itu berarti Anda menangkap tampilan sebelum pengelola Jendela membuatnya. Beberapa tata letak sangat rumit. Jika layout menyertakan layout bersarang, layout_weight..etc, ini menyebabkan beberapa kali relai mendapatkan ukuran yang tepat. Solusi terbaik adalah menunggu sampai window manager menyelesaikan pekerjaan dan kemudian mendapatkan screen shot. Coba letakkan getDrawingCache () di handler.
sumber
Jawaban @ cV2 dan @ nininho bekerja untuk saya.
Salah satu alasan lain yang saya temukan dengan susah payah adalah bahwa tampilan yang saya miliki menghasilkan tampilan yang memiliki lebar dan tinggi 0 ( yaitu bayangkan memiliki TextView dengan teks string dari string kosong ). Dalam kasus ini, getDrawingCache akan mengembalikan null, jadi pastikan untuk memeriksanya. Harapan yang membantu beberapa orang di luar sana.
sumber
Kesalahannya mungkin karena View Anda terlalu besar untuk dimasukkan ke dalam cache gambar .
Saya mendapat penjelasan tentang masalah "View.getDrawingCache mengembalikan null" dari log saya:
Dokumen Android juga mengatakan : Perangkat Android hanya dapat memiliki memori 16MB yang tersedia untuk satu aplikasi. Itulah mengapa Anda tidak dapat memuat bitmap besar.
sumber
Saya mencoba membuat jumlah n gambar secara dinamis berdasarkan tampilan.
Saya pikir kode ini akan membantu seseorang ..
sumber
Ini cara sederhana dan efisien untuk mendapatkan bitmap
sumber