Saya sedang mengerjakan aplikasi android, dan saya memiliki gambar yang dapat saya muat dari gambar sumber. Pada gambar ini, saya ingin mengonversi semua piksel putih ke warna yang berbeda, katakan biru, dan kemudian cache objek Drawable yang dihasilkan sehingga saya bisa menggunakannya nanti.
Jadi misalnya katakan saya memiliki file PNG 20x20 yang memiliki lingkaran putih di tengah, dan segala sesuatu di luar lingkaran transparan. Apa cara terbaik untuk mengubah lingkaran putih itu menjadi biru dan menyimpan hasilnya? Apakah jawabannya berubah jika saya ingin menggunakan gambar sumber itu untuk membuat beberapa Drawables baru (misalnya biru, merah, hijau, oranye, dll)?
Saya menduga bahwa saya ingin menggunakan ColorMatrix dalam beberapa cara, tapi saya tidak yakin bagaimana caranya.
sumber
/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
Jawaban:
Saya pikir Anda benar-benar bisa hanya menggunakan
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. Ini akan mengatur piksel putih menjadi merah tetapi saya tidak berpikir itu akan mempengaruhi piksel transparan.Lihat Drawable # setColorFilter
sumber
Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)
info lebih lanjut: curious-creature.org/2009/05/02/drawable-mutationssetColorFilter
setiap kali kami menggunakan ikon alih-alih memiliki pemilih dengan warna berbeda. Namun, ini adalah solusi yang jauh lebih baik daripada mengedit png secara langsung dan memiliki aset statis ekstra.SRC_IN
:myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
Cobalah kode ini:
sumber
Saya tahu pertanyaan ini diajukan jauh sebelum Lollipop tetapi saya ingin menambahkan cara yang bagus untuk melakukan ini di Android 5. +. Anda membuat xml drawable yang mereferensikan yang asli dan menetapkan warna di atasnya seperti:
sumber
Dukungan v4 baru membawa warna kembali ke api 4.
Anda bisa melakukannya seperti ini
sumber
Jika Anda memiliki drawable yang berwarna solid dan Anda ingin mengubahnya menjadi warna solid differnet, Anda dapat menggunakan a
ColorMatrixColorFilter
. Transparansi dipertahankan.sumber
int iColor = ContextCompat.getColor(context, R.color.primary);
.Saya juga menggunakan
ImageView
ikon (diListView
layar pengaturan atau). Tapi saya pikir ada cara yang lebih sederhana untuk melakukan itu.Gunakan
tint
untuk mengubah overlay warna pada ikon yang Anda pilih.Dalam xml,
berfungsi dengan baik karena itu berasal
AppCompat
sumber
Anda harus melakukan ini untuk semua API:
sumber
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);
akan berubah hitam menjadi abu-abu di drawable.Saya bisa melakukan ini dengan kode berikut, yang diambil dari suatu kegiatan (tata letak adalah yang sangat sederhana, hanya mengandung ImageView, dan tidak diposting di sini).
sumber
Anda dapat menyelesaikannya menggunakan perpustakaan dukungan Android. :)
sumber
mutate()
panggilan tersebut diperlukan untuk dapat mengubah warna drawable, tanpa mengubah semua drawable associates dengan ID sumber daya itu.Dalam Aktivitas Anda, Anda dapat mewarnai sumber gambar PNG Anda dengan satu warna:
Sekarang ketika Anda menggunakan R.drawable. * Itu harus diwarnai dengan warna yang diinginkan. Jika Anda membutuhkan warna tambahan maka Anda harus dapat .mutate () gambar.
sumber
Terima kasih kepada @sabadow
sumber
Jika Anda memiliki set yang dapat ditarik ke ImageView, Anda dapat melakukannya dengan 1 liner:
sumber
Lihat kode contoh ini " ColorMatrixSample.java "
API yang relevan tersedia di sini :
sumber
Ini bekerja dengan semuanya dengan latar belakang:
Tampilan teks, Tombol ...
sumber
Cuplikan kode ini berfungsi untuk saya:
sumber
Ada begitu banyak solusi tetapi tidak ada yang menyarankan jika file xml sumber daya warna sudah memiliki warna maka kita dapat memilih langsung dari sana juga seperti di bawah ini:
sumber
Contoh singkat untuk mengubah warna yang dapat digambar sesuai
isWorking
bidang.Bentuk saya xml:
Metode saya untuk berubah:
Contoh penggunaan:
sumber
dalam XML /res/values/color.xml
Kode Java
sumber
Terlambat tetapi jika seseorang membutuhkannya:
sumber
Ini berfungsi untuk beberapa drawable sederhana. Saya menggunakannya pada bentuk persegi warna solid sederhana dengan sudut bulat dan perlu mengubah warna itu dengan tata letak yang berbeda.
Coba ini
sumber
Ini sangat sangat sederhana ketika Anda menggunakan perpustakaan untuk melakukannya untuk Anda. Coba pustaka ini
Anda dapat memanggil seperti ini:
sumber