0

我有一個ImageView,它顯示了我的資源文件夾的Drawable。其次,我在ImageView下面有一個seekbar。每個像素的顏色應該根據seekbar的值而改變。應該改變每個像素的顏色,當seekbar具有最大值時,每個像素的'g'和'b'值應該爲0,以便只顯示紅色。如果您降低搜索欄,則應將其轉回。根據Android中的SeekBar更改可繪製顏色

我認爲這是通過將drawable轉換爲位圖,遍歷像素並根據當前的seekbar進度及其當前顏色值更改其顏色值來完成的。

但這只是一個想法。到目前爲止,我無法以正確的方式實現這一點。也許你們中的一些人可以給出一個代碼示例,或者甚至有更好的解決方案。如果有人能幫忙,會很高興。

編輯:隨着@pskink的幫助(見下面的評論),我是能夠實現的東西:

float colorValue = 1 - (float) seekBar.getProgress()/100; // SeekBar has 100 as maxVal 

float[] colorMatrix = { 
    1, 0, 0, 0, 0, //red 
    0, colorValue, 0, 0, 0, //green 
    0, 0, colorValue, 0, 0, //blue 
    0, 0, 0, 1, 0 //alpha 
}; 

ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix); 
backgroungImageView.setColorFilter(colorFilter); 

現在的問題是(明顯),不僅原來的紅色部分中脫穎而出。一切都是紅色的,這也不是我想要的。我試圖實現的目標是當搜索條達到最高水平時只顯示紅色部分。如果ColorMatrix也可以這麼做,但我不確定。有什麼建議麼?可以玩Alpha通道幫助嗎?

+1

查看'ColorMatrixColorFilter' – pskink

+0

非常感謝!這似乎是我需要的東西 – MattLance

+0

我希望你知道如何將它應用到你的'ImageView'上? – pskink

回答

0

如果有人有興趣,這是我如何解決了pskinks幫助的問題:

(搜索欄仍然有包括maxValue 100)

float pr = seekBar.getProgress()/(float) 50; 

float[] colorMatrix = { 
     1, 0, 0, 0, 0, //red 
     0, 1, 0, 0, 0, //green 
     0, 0, 1, 0, 0, //blue 
     pr/2, -pr, -pr, 1, 0 //alpha 
}; 

ColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix); 
backgroungImageView.setColorFilter(colorFilter); 

剛玩的價值得到一些其他的結果。到目前爲止,這些是我獲得最佳結果的價值。

+0

我承認這是一個「黑色魔術「給我,但這些魔術浮點數做的很好:http://pastebin.com/Mdzbb7JY – pskink