2011-12-07 47 views
3

我不想使用狀態選擇器。我想編寫通用代碼來將過濾器應用於文本顏色,而不管原始顏色是什麼。如何將PorterDuff過濾器應用於文本顏色?

這實際上是按下時的着色按鈕的一部分。我明白了,我可以很容易着色的ImageButton的:

imageButton.setColorFilter(Color.argb(150, 155, 155, 155)); 

對於一個按鈕,我可以着色的背景圖像:

button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY); 

不過,我無法找出如何在着色Button的文本的顏色值。有任何想法嗎?是否有某種方法,所以我可以將PorterDuff色調應用於任意顏色值,以便我可以將新值設置爲tet色彩?

回答

5

我花了幾個小時學習文檔和論壇,並且可以發現絕對沒有直接的方法將PorterDuff過濾器應用於文本或任意(int)顏色值;一切似乎都與圖像有關。

我的解決辦法是醜陋的,但唯一的解決辦法,我發現:

int normalTextColor = Color.argb(0, 155, 155, 155); 
Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); //make a 1-pixel Bitmap 
Canvas canvas = new Canvas(bitmap); 
canvas.drawColor(normalTextColor); //color we want to apply filter to 
canvas.drawColor(pressedFilterColor, mode); //apply filter 
int pressedTextColor = bitmap.getPixel(0, 0); 

普雷斯托 - 現在你可以在你的TextView,按鈕等新pressedTextColor使用的setColor()或setTextColor()

我很想聽聽一個不涉及繪製一個像素位圖的替代方案,因爲這看起來很荒謬 - 但這確實完成了工作。

相關問題