2013年5月2日木曜日

setColorとsetAlphaで半透過描画した時の落とし穴

こんなのにはまるのは自分だけかもしれませんが、半透過の描画をしようとしてはまってしまったので書いておきます。
描画時に透過したい場合setAlphaを使ったりしますが、このときsetColorとの組み合わせに注意しなければなりません。
例えば赤い半透明の丸を書いて、その横に青い半透明の丸を書きたいなんて時

Paint paint = new Paint();
paint.setColor(linecolor);
paint.setStyle(Style.FILL);
//描画色_赤指定
paint.setColor(Color.RED);
//半透過指定
paint.setAlpha(128);
//丸描画
canvas.drawCircle(40, 40, 40f, paint);
//描画色_青指定
paint.setColor(Color.BLUE);
//丸描画
canvas.drawCircle(120, 40, 40f, paint);

と書いてしまうとこうなります。
青い丸が透過していません。なぜかというとsetColorリファレンスをよく見ると、The new color (including alpha)と書いてある通り透過パラメータを含んでます。
Color.BLUEはColor.argb(255, 0, 0, 255)と値が同じなので、Color.BLUEをセットすると透過なしになってしまいます。
なのでこの場合、setColor後に再度setAlpha(128)をするかsetColor(Color.argb(128, 0, 0, 255))にすると
このように意図したとおりになります。
リファレンスはちゃんと読もうということですよね…

0 件のコメント:

コメントを投稿