Anda mungkin menggunakan id sumber daya integer alih-alih nilai warna integer, coba konversi R.color.blue menjadi getResources (). GetColor (R.color.blue)
milosmns
Drawable drawable = ...; drawable.setColorFilter (ContextCompat.getColor (konteks, R.color.white), PorterDuff.Mode.DST); imageView.setImageDrawable (dapat ditarik); // warna apa saja dapat digunakan di sini
flame3
Jawaban:
916
Anda dapat mengubah warna, cukup mudah dalam kode melalui:
imageView.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint
UPDATE :
@ADev memiliki solusi yang lebih baru dalam jawabannya di sini , tetapi solusinya memerlukan pustaka dukungan yang lebih baru - 25.4.0 atau lebih tinggi.
Perhatikan bahwa yourTintdalam hal ini harus "warna int". Jika Anda memiliki sumber daya warna seperti R.color.blue, Anda harus memuat int warna terlebih dahulu:
Seharusnya jawaban yang diterima. Perhatikan bahwa ini hanya berfungsi pada ImageViewinstance xml dengan tema AppCompat atau pada AppCompatImageViewsubkelas.
Louis CAD
1
@ADev menghargai solusi Anda tetapi pertanyaannya diajukan pada 2013 dan ImageViewCompat dan AppCompatImageView rilis dengan dukungan v4 lib 25.4.0 pada bulan Juni 2017 dan 25.1.0 Desember 2016 masing-masing :)
Hardik
1
@ADev tentu saja tetapi Anda belum menyebutkan dengan benar dalam jawaban Anda bahwa solusi Anda baru dan memerlukan pustaka dukungan yang lebih baru 25.4.0 dan di atas karena dengan versi lib dukungan yang lebih rendah, kelas ini tidak tersedia sehingga tidak ada yang bisa menemukannya !! !! omong-omong saya edit jawabannya :) selamat siang ...
ya, bekerja untuk saya juga, tanpa parameter kedua .. itu juga bisamImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
Biskrem Muhammad
terbalik dan tanpa parameter kedua, itu berfungsi seperti pesona. Thx @ toobsco42
Ravi Vaniya
35
@Hardik benar. Kesalahan lain dalam kode Anda adalah ketika Anda mereferensikan warna yang ditentukan-XML Anda. Anda hanya meneruskan id ke setColorFiltermetode, saat Anda harus menggunakan ID untuk menemukan sumber daya warna, dan meneruskan sumber ke setColorFiltermetode. Menulis ulang kode asli Anda di bawah ini.
Selain itu, Anda perlu merujuk aktivitas utama Anda:
Activity main =...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);
Perhatikan bahwa ini juga berlaku untuk jenis sumber daya lainnya, seperti bilangan bulat, bools, dimensi, dll. Kecuali untuk string, yang dapat Anda gunakan langsung getString()dalam Aktivitas Anda tanpa perlu melakukan panggilan pertama getResources()(jangan tanya kenapa) .
Kalau tidak, kode Anda terlihat bagus. (Meskipun aku belum menyelidiki setColorFiltermetode ini terlalu banyak ...)
Fungsi ekstensi yang disederhanakan lebih baik berkat ADev
fun ImageView.setTint(@ColorRes colorRes:Int){ImageViewCompat.setImageTintList(this,ColorStateList.valueOf(ContextCompat.getColor(context, colorRes)))}
Apakah ada yang serupa untuk warna teks Tombol / TextView?
pengembang android
maksud Anda warna teks tampilan teks atau warna untuk tampilan teks menggambar?
Manohar Reddy
Maksud saya "warna teks". Warna teks. Tapi saya pikir itu cukup bermasalah, karena teks memiliki warna untuk setiap negara ... Kemudian lagi, bagaimana bisa berfungsi dengan baik ketika saya mengatur warna aksen ... Aneh .... Apakah mungkin untuk mengatur warna aksen ke Tombol tertentu (atau TextView), secara terprogram?
pengembang android
12
Coba ini. Ini harus bekerja pada semua versi Android yang didukung oleh perpustakaan dukungan:
//get ImageViewImageView myImageView =(ImageView) findViewById(R.id.iv);//colorid is the id of a color defined in values/colors.xml
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));
Ini sepertinya hanya berfungsi di API 21+, tetapi bagi saya itu bukan masalah. Anda dapat menggunakan ImageViewCompat untuk menyelesaikan masalah itu, tho.
Mulai di Lollipop, ada metode yang disebut ImageView#setImageTintList()bahwa Anda dapat menggunakan ... keuntungannya karena dibutuhkan ColorStateListsebagai lawan hanya satu warna, sehingga membuat warna gambar menjadi sadar.
Pada perangkat pra-Lollipop, Anda bisa mendapatkan perilaku yang sama dengan mewarnai drawable dan kemudian mengaturnya sebagai ImageViewdrawable gambar:
Menambah Adev 's jawaban (yang menurut saya adalah yang paling benar), karena adopsi Kotlin, dan fungsi ekstensi yang berguna:
fun ImageView.setTint(context:Context,@ColorRes colorId:Int){
val color =ContextCompat.getColor(context, colorId)
val colorStateList =ColorStateList.valueOf(color)ImageViewCompat.setImageTintList(this, colorStateList)}
Saya pikir ini adalah fungsi yang bisa berguna untuk ada di proyek Android mana pun!
Hai, Ini tidak berfungsi untuk digambar vektor .. Ada solusi yang sama?
Manukumar
@Manukumar Gunakan app:srcCompatalih-alih android:src, dan tambahkan vectorDrawables.useSupportLibrary = trueke defaultConfigbagian file build.gradle Anda. Diuji bekerja dengan baik pada emulator Kitkat.
pengembang android
3
Jangan gunakan PoterDuff.Mode, Gunakan setColorFilter()itu berfungsi untuk semua.
Seperti yang dikatakan @milosmns, Anda harus menggunakan
imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);
API ini membutuhkan nilai warna alih-alih id sumber daya warna, Itulah penyebab utama mengapa pernyataan Anda tidak berfungsi.
Saya terlambat ke pesta tetapi saya tidak melihat solusi saya di atas. Kami juga dapat mengatur warna warna setImageResource()(minSdkVersion saya adalah 24).
Jadi, pertama, Anda perlu membuat pemilih dan menyimpannya di /drawablefolder aset (saya menyebutnya ic_color_white_green_search.xml)
<!-- Focused and not pressed --><itemandroid:state_focused="true"android:state_pressed="false"><bitmapandroid:src="@drawable/ic_search"android:tint="@color/branding_green"/></item><!-- Focused and pressed --><itemandroid:state_focused="true"android:state_pressed="true"><bitmapandroid:src="@drawable/ic_search"android:tint="@color/branding_green"/></item><!-- Default --><itemandroid:drawable="@drawable/ic_search"/>
Kemudian atur dalam kode seperti ini:
val icon = itemView.findViewById(R.id.icon)asImageButton
icon.setImageResource(R.drawable.ic_color_white_green_search)
Solusi Kotlin menggunakan fungsi ekstensi, untuk mengatur dan menghapus pewarnaan:
fun ImageView.setTint(@ColorInt color:Int?){if(color ==null){ImageViewCompat.setImageTintList(this,null)return}ImageViewCompat.setImageTintMode(this,PorterDuff.Mode.SRC_ATOP)ImageViewCompat.setImageTintList(this,ColorStateList.valueOf(color))}
ini tentang warna! bukan alpha yang untuk transparansi.
David
Tapi itu akhirnya bertindak sebagai warna. Anda harus mencobanya sendiri. Ini hanya satu cara untuk melihat berbagai hal.
Shubham Chaudhary
@ ShubhamChaudhary Saya tahu ini terlambat tapi bagaimana jika gambarnya png. Maka bukankah latar belakang akan berubah? Juga alfa dan rona sangat berbeda. Warna Seperti penggantian warna, jika saya tidak salah. Tidak ada pelanggaran yang dimaksudkan. Hanya berusaha membantu :)
KISHORE_ZE
Poin yang valid. Jawaban ini membantu dalam kasus saya. Harapan juga cocok dengan sepatu orang lain.
Jawaban:
Anda dapat mengubah warna, cukup mudah dalam kode melalui:
imageView.setColorFilter(Color.argb(255, 255, 255, 255));
// White TintJika Anda ingin warna warna itu
Untuk Gambar Vektor
UPDATE :
@ADev memiliki solusi yang lebih baru dalam jawabannya di sini , tetapi solusinya memerlukan pustaka dukungan yang lebih baru - 25.4.0 atau lebih tinggi.
sumber
android:tint
bekerja di semua versi android. Mungkin Anda sedang berbicara tentangdrawableTint
?Sebagian besar jawaban merujuk pada penggunaan
setColorFilter
yang bukan apa yang ditanyakan semula.Pengguna @Tad memiliki jawabannya di arah yang benar tetapi hanya bekerja di API 21+.
Untuk mengatur warna pada semua versi Android, gunakan
ImageViewCompat
:Perhatikan bahwa
yourTint
dalam hal ini harus "warna int". Jika Anda memiliki sumber daya warna sepertiR.color.blue
, Anda harus memuat int warna terlebih dahulu:sumber
ImageView
instance xml dengan tema AppCompat atau padaAppCompatImageView
subkelas.Ini berhasil untuk saya
sumber
mImageView.setColorFilter(getContext().getResources().getColor(R.color.green_500));
@Hardik benar. Kesalahan lain dalam kode Anda adalah ketika Anda mereferensikan warna yang ditentukan-XML Anda. Anda hanya meneruskan id ke
setColorFilter
metode, saat Anda harus menggunakan ID untuk menemukan sumber daya warna, dan meneruskan sumber kesetColorFilter
metode. Menulis ulang kode asli Anda di bawah ini.Jika baris ini ada dalam aktivitas Anda:
Selain itu, Anda perlu merujuk aktivitas utama Anda:
Perhatikan bahwa ini juga berlaku untuk jenis sumber daya lainnya, seperti bilangan bulat, bools, dimensi, dll. Kecuali untuk string, yang dapat Anda gunakan langsung
getString()
dalam Aktivitas Anda tanpa perlu melakukan panggilan pertamagetResources()
(jangan tanya kenapa) .Kalau tidak, kode Anda terlihat bagus. (Meskipun aku belum menyelidiki
setColorFilter
metode ini terlalu banyak ...)sumber
Setelah saya mencoba semua metode dan mereka tidak berhasil untuk saya.
Saya mendapatkan solusinya dengan menggunakan PortDuff.MODE lain.
sumber
Dimulai dengan Lollipop, ada juga metode warna untuk BitmapDrawables yang bekerja dengan kelas Palette baru:
dan
Pada versi Android yang lebih lama, Anda sekarang dapat menggunakan pustaka DrawableCompat
sumber
Fungsi ekstensi yang disederhanakan lebih baik berkat ADev
Pemakaian:-
sumber
Coba ini. Ini harus bekerja pada semua versi Android yang didukung oleh perpustakaan dukungan:
Anda dapat menggunakan salah satu di atas untuk membuatnya berfungsi.
Anda dapat membaca tentang fitur yang lebih menarik dari DrawableCompat di dokumen, di sini .
sumber
imageView.getBackground()
untuk mendapatkan drawable, karenaimageView.getDrawable()
mengembalikan nol.Jika warna Anda memiliki transparansi hex, gunakan kode di bawah ini.
Untuk menghapus warna
sumber
img
adalah tipe ImageView.Sederhana dan satu baris
sumber
Karena jawaban pertama tidak berhasil untuk saya:
Ini sepertinya hanya berfungsi di API 21+, tetapi bagi saya itu bukan masalah. Anda dapat menggunakan ImageViewCompat untuk menyelesaikan masalah itu, tho.
Saya harap saya membantu siapa pun :-)
sumber
Mulai di Lollipop, ada metode yang disebut
ImageView#setImageTintList()
bahwa Anda dapat menggunakan ... keuntungannya karena dibutuhkanColorStateList
sebagai lawan hanya satu warna, sehingga membuat warna gambar menjadi sadar.Pada perangkat pra-Lollipop, Anda bisa mendapatkan perilaku yang sama dengan mewarnai drawable dan kemudian mengaturnya sebagai
ImageView
drawable gambar:sumber
sumber
Untuk mengatur warna untuk tampilan gambar secara terprogram di android
Saya punya dua metode untuk android:
1)
2)
Saya harap saya membantu siapa pun :-)
sumber
Menambah Adev 's jawaban (yang menurut saya adalah yang paling benar), karena adopsi Kotlin, dan fungsi ekstensi yang berguna:
Saya pikir ini adalah fungsi yang bisa berguna untuk ada di proyek Android mana pun!
sumber
Saya menemukan bahwa kita dapat menggunakan pemilih warna untuk warna awal:
activity_main.xml:
section_arrowup_color.xml:
sumber
app:srcCompat
alih-alihandroid:src
, dan tambahkanvectorDrawables.useSupportLibrary = true
kedefaultConfig
bagian file build.gradle Anda. Diuji bekerja dengan baik pada emulator Kitkat.Jangan gunakan
PoterDuff.Mode
, GunakansetColorFilter()
itu berfungsi untuk semua.sumber
Seperti yang dikatakan @milosmns, Anda harus menggunakan
imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);
API ini membutuhkan nilai warna alih-alih id sumber daya warna, Itulah penyebab utama mengapa pernyataan Anda tidak berfungsi.
sumber
Saya terlambat ke pesta tetapi saya tidak melihat solusi saya di atas. Kami juga dapat mengatur warna warna
setImageResource()
(minSdkVersion saya adalah 24).Jadi, pertama, Anda perlu membuat pemilih dan menyimpannya di
/drawable
folder aset (saya menyebutnyaic_color_white_green_search.xml
)Kemudian atur dalam kode seperti ini:
sumber
Jika Anda ingin mengatur pemilih ke warna Anda:
sumber
Solusi Kotlin menggunakan fungsi ekstensi, untuk mengatur dan menghapus pewarnaan:
sumber
Bukan jawaban yang pasti tetapi alternatif yang lebih sederhana:
Berikut ini cuplikannya:
sumber
png
. Maka bukankah latar belakang akan berubah? Juga alfa dan rona sangat berbeda. Warna Seperti penggantian warna, jika saya tidak salah. Tidak ada pelanggaran yang dimaksudkan. Hanya berusaha membantu :)