2015-02-26 17 views
6

Bu soruna cevap veren yayınlara bakıyorum, ancak bunların hiçbiri benim için çalışmıyor, bu yüzden nasıl çalışması gerektiğine dair temel bir yanlış anlaşılma olduğunu düşünüyorum. Ona uygulanan bir png dosyası olan bir ImageButton'um var. Png çoğunlukla beyaz bir ok dışında şeffaftır. Ben setColorFilter ile ok kırmızı tonu istiyorum:Android ImageButton setColorFilter Not

imageButton.setColorFilter(Color.argb(255, 225, 0, 0)); 

ama bu hiçbir etkisi yoktur. SetColorFilter sürümünü çeşitli Porter-Duff modlarıyla denedim, ancak bunların hiçbiri işe yaramadı. Sorunun ne olabileceği ya da eksik olabileceğine dair herhangi bir fikir büyük ölçüde takdir edilecektir.

cevap

10

Kullanmaya çalıştığınız setColorFilter'ı (kurulumunuzda) uygulayacağınız için Çizilebilir'i düğmeden almanız gerekir.

ImageButton btn = (ImageButton) myLayout.findViewByID(R.id.my_button); 

int mycolor = getResources().getColor(R.color.best_color); 

btn.getDrawable().setColorFilter(mycolor, PorterDuff.Mode.SRC_ATOP); 

Sürece bir Drawable nesneye doğru başvuru olduğu gibi

,

e.g. textView.getCompoundDrawables()[2].setColorFilter(...);

olan kendi XML:

<TextView 
... 
android:drawableLeft="..." 
... 
/> 

Eğer myDrawableObject.setColorFilter (kullanabilirsiniz) için tam sevginiz.

Düzenleme: imageButton.getBackground()android:background="..." özelliğine karşılık ise ImageButton için

, imageButton.getDrawable() için çekilebilir android:src="..." karşılık gelmektedir. SetColorFilter'ı doğru çizilebilir olarak çağırdığınızdan emin olun.

+1

Bu çok yardımcı oldu, ancak PorterDuff.Mode.MULTIPLY - drawable.setColorFilter (Color.argb (225, 225, 0, 0), PorterDuff.Mode.MULTIPLY) kullanmak zorunda kaldım; – Ken

+0

Görünümün kendisinden çekilebilir bir çekicilik gibi çalıştı. –

+0

Doğru çizime atıfta bulunduğumdan emin olmak için hatırlatıcınız, problemimi çözmeme yardımcı oldu - Benim ImageView'ımda "src" yerine "arkaplan" olarak çizilebilirimi ayarladım. – beyondtheteal