0

私は自分のリソースフォルダのDrawableを示すImageViewを持っています。次にImageViewの下にシークバーがあります。各ピクセルの色は、シークバーの値に応じて変更する必要があります。シークバーが最大値を持つとき、各ピクセルの 'g'と 'b'の値は0でなければならないので、赤だけが表示されるように、各ピクセルの色を変更する必要があります。シークバーを下げると変換されます。ドローイング色をAndroidのSeekBarに応じて変更してください

これは、drawableをビットマップに変換し、ピクセルを反復し、現在のシークバーの進行状況と現在の色の値に応じて色の値を変更することによって行われると思います。

これは単なるアイデアです。これまでのところ私はこれを正しい方法で実装することができませんでした。たぶんあなたの中には、コード例を挙げたり、もっと良い解決策を用意したりする人もいます。もし誰かが助けてくれたらうれしいです。

EDIT:

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

問題は今、(明らかに)だけでなく、オリジナルの赤の部分が目立つ:@pskinkのヘルプ(下記のコメントを参照)で、私はものを実装することができました。すべてが赤で、これも私が望むものではありません。私が達成しようとしている目標は、シークバーが最大レベルに達すると赤い部分だけが表示されることです。 ColorMatrixでもこれが可能ならば涼しいでしょうが、私はよくわかりません。助言がありますか?アルファチャンネルで遊ぶのは助けてくれますか?

+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

関連する問題