2016-03-20 10 views
0

私は自分のアプリケーションの実際の画面にソリッドカラーからカスタムFadingColorの移行をしようとしている、 paint.setAlpha()は期待通りに動作しない

私は上の描画するキャンバスを持っている、と私はドロー私は理解できない

// int alpha is ensured to stay in [0,255] range... 
alpha -= 1; 
canvas.drawColor(Color.WHITE); 
//then I draw a circle in the middle 
//... 
canvas.drawColor(Color.argb(alpha,255,255,255)); 

とスクリーン(私はダブルバッファリングされていると私は、画面ごとにフレームを描きますキャンバスをよく知ってんだけど、まだそれがちらつく...)

事はしばらくの間ということですアニメーションの画面がちらつき、背景が文字通りargb(アルファ、255,255,2 55)をargb(255,255,255,255)上にいくつかのフレームで明るい灰色にレンダリング!

これはどのように可能なのか理解したいだけですか?どのように半透明の白は、白い背景を少なく白くすることができますか?

答えて

1

解決策を見つけました。

最初に、問題はColorFilterモード(またはPorterDuff.Mode)と関係があり、アルファ成分で2つのカラーを適用すると、デフォルトで「ADD」で混合されません。なぜなら、なぜ誰かが詳細に説明することができたのかもしれない理由はまだ分かりません。

(トリック)解決策(PorterDuff.Modeは下位APIではサポートされていないため)Shader(LinearGradientのみ1色)

paint.setShader(new LinearGradient(0,0,100,100,Color.argb(alpha,red,green,blue), 
Color.argb(alpha,red,green,blue), Shader.TileMode.REPEAT)); 

この解決策は、アニメーションに表示されていたちらつきと奇妙な色の組み合わせを修正しました。

関連する問題