2011-11-19 20 views
18

ColorFilter - ImageView'a eklemek istiyorum. ŞuResimdeki görüntüye bir renk filtresi eklemek istiyorum

kullanıyorum: Ben Çoklu Modlar kontrol ettim

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); 
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 

PotterDuff böyle Hepsi vb SRC_IN, SRC ama modlarından herhangi birinde herhangi bir fark almıyorum ... olarak modu ImageView'un tamamını mükemmel Kırmızı renkte döndürür. O görüntü kırmızımtırak bir renk ile bakacağız bu nedenle mevcut görüntüdeki KIRMIZI renk karışımı gerekir

....

+2

oops ... yapmanın doğru yolu PorterDuff.Mode.Lighten ... –

+0

Bunun nedeni alfa kanalı olmamasıdır (ör. görüntünüzde şeffaflık).Genellikle setColorFilter() ', simgeleri renklendirmek için kullanılır ve aslında varsayılan davranış yalnızca alfa kanalını koruyan tüm görüntüyü renklendirmektir. 'PorterDuff.Mode.LIGHTEN' yerine parlaklığı korur, böylece görüntünüzün renkli parçaları kırmızıya döner ve beyaz olanlar oldukları gibi kalır. –

cevap

25

Bunu yapmanın doğru yolu PorterDuff.Mode.LIGHTEN kullanıyordu.

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); 
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN); 
+1

Bunun nedeni, görüntünüzde alfa kanalı (yani saydamlık) olmamasıdır. Genellikle setColorFilter() ', simgeleri renklendirmek için kullanılır ve aslında varsayılan davranış yalnızca alfa kanalını koruyan tüm görüntüyü renklendirmektir. 'PorterDuff.Mode.LIGHTEN' yerine parlaklığı korur, böylece görüntünüzün renkli parçaları kırmızıya döner ve beyaz olanlar oldukları gibi kalır. –

6

Bu benim için çalıştı:

yılında res/colors.xml:

int highlightColor = context.getResources().getColor(R.color.highlight_color_filter); 
PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP); 

Paint redHighLight = new Paint(); 
redHighLight.setColorFilter(targetHitFilter); 
redHighLight.setAlpha(190); 

sonra ap: Faaliyetinizdeki

<color name="highlight_color_filter">#A5FF0000</color> 
filtre ve vurgu boya başlatmak ImageView Filtreyi kat:

ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter); 
iv.setColorFilter(redHighLight); 

o ImageView çekilebilir müracaat deneyin işe yaramazsa: yardımcı

iv.getDrawable().setColorFilter(redHighLight); 

umut.

+0

Bu bir şey ya da başka bir şey olmamak ama burada daha iyi bir cevap: http://stackoverflow.com/questions/10114420/applying-colorfilter-to-imageview-with-shapeddrawable – pgsandstrom

+10

Bu, derleme yapmaz. redHighLight, bir ColorFilter değil bir Boyadır. –

2

Diğer çözümü, sen PorterDuff.Mode.SRC_ATOP modunu tutulur ve şeffaf bir renge sahip başka bir alfa kullanmasa olabilirdi:

Yani güncellenen kod gibi olacak.

Alfa değeri olarak 155 kullanın:

final int semiTransparentGrey = Color.argb(155, 185, 185, 185); 
    drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP); 
+0

155 aplha'yı nasıl ayarladınız? – behelit

+0

Alfa'yı doğrudan ayarlayabilir, örneğin color.xml kaynağının içindeki veya koddaki rengi tanımlamak için ilk argüman değerini ayarlayabilirsiniz. Örnek: int FILTERED_GREY = Color.argb (155, 185, 185, 185); –

+0

Bu doğru cevap olmalı! – GensaGames

5

Sen android kullanabilirsiniz: Eğer xml dosyasında (link) inceltme. Örnek: Ayrıca kaldırabilir xml dosyasında

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/your_drawable" 
    android:tint="@color/your_color" /> 
+1

En iyi cevap olmalı. Senin rengin böyle bir şeydir; '' 'renk adı =" your_color "> # 55000000' '' –

0

Kullanıcı tonu Örneğin

 <ImageView 
      android:id="@+id/scrachImage_1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:tint="@color/colorAccent" 
      android:src="@drawable/eagle" /> 

programlı renk filtresi eklemek istediğiniz ardından

scratchImage_2.setColorFilter(Color.BLACK); 

kullanabiliyorsa Bu kodu kullanarak bu renk filtresi:

scratchImage_2.setColorFilter(null);

İlgili konular