2011-11-19 96 views
18

我想添加一個ColorFilterImageView我想添加一個彩色濾鏡到imageview

目前我使用:

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

我在檢查多種模式PotterDuffSRC_INSRC等,但我沒有得到任何模式中的任何區別...所有模式將整個ImageView變成完美的紅色。

我需要在現有映像中融入紅色,使圖像看起來有一個紅色的色彩....

+2

oops ...正確的做法是PorterDuff.Mode.Lighten ... –

+0

這是因爲沒有alpha通道(即,透明度)在您的圖像。通常'setColorFilter()'用於給圖標着色,事實上,默認行爲是將所有圖像着色爲只保留Alpha通道。 'PorterDuff.Mode.LIGHTEN'代替亮度,所以圖像的彩色部分變成紅色,而白色部分保持原樣。 –

回答

25

正確的做法是使用PorterDuff.Mode.LIGHTEN

所以更新的代碼將是這樣的:

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

這是因爲圖像中沒有alpha通道(即透明度)。通常'setColorFilter()'用於給圖標着色,事實上,默認行爲是將所有圖像着色爲只保留Alpha通道。 'PorterDuff.Mode.LIGHTEN'代替亮度,所以圖像的彩色部分變成紅色,而白色部分保持原樣。 –

6

這爲我工作:在

RES/colors.xml:

<color name="highlight_color_filter">#A5FF0000</color> 
在活動

初始化過濾器和高光漆:

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); 

然後AP往返於過濾器的ImageView的:

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

如果不行嘗試應用到ImageView的繪製:

iv.getDrawable().setColorFilter(redHighLight); 

希望幫助。

+0

不是一個或任何東西,但這裏是一個更好的答案:http://stackoverflow.com/questions/10114420/applying-colorfilter-to-imageview-with-shapeddrawable – pgsandstrom

+10

這不會編譯。 redHighLight是一個Paint而不是ColorFilter。 –

2

其他的解決方案,你可以一直保持PorterDuff.Mode.SRC_ATOP模式,並使用其他阿爾法有一個透明的顏色。

我用155阿爾法值:

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

你怎麼設置155 aplha? – behelit

+0

您可以直接設置alpha,設置第一個argb值以定義color.xml資源中的顏色,例如或代碼中。例如:int FILTERED_GREY = Color.argb(155,185,185,185); –

+0

這應該是正確答案! – GensaGames

5

你可以使用Android的:在你的XML文件着色link)。例如:

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

應該是最佳答案。你的顏色是這樣的; '''color name =「your_color」>#55000000''' –

0

在XML文件中,你可以將用戶色調例如

 <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" /> 

如果你想以編程方式添加彩色濾光片然後使用

scratchImage_2.setColorFilter(Color.BLACK); 

還可以去除此彩色濾光片使用此代碼:

scratchImage_2.setColorFilter(null);