格式化

廣告

廣告2

2012年2月12日 星期日

[Android app開發基本概念] Canvas.drawText() 設置了alpha值卻沒有半透明效果的有關問題

問題
Canvas.drawText() 設置了alpha值卻沒有半透明效果的問題

需求:
在屏幕上畫text,需要字體為藍色,並且要有半透明效果

思路:使用Canvas.drawText() 。

先看下面代碼:

 protected void onDraw(Canvas canvas)
 {
     super.onDraw(canvas);
     Paint paint = new Paint();
     paint.setAlpha(0x40);
     paint.setColor(Color.BLUE);
     canvas.drawText("Hello", 0, 0, paint);
 }

你認為這代碼沒錯吧?
是的邏輯上的確沒錯。
可是出來的效果卻沒有體現出半透明。

為什麼捏?
折騰了好半天,最後注意到paint.setColor()方法裡的說明:
Set the paint's color. Note that the color is an int containing alpha as well as r,g,b.
英文好的朋友們都看懂了吧,是的setColor中傳的參數是包含了alpha值的。
因此我們等於是先設置了alpha值為0x40,然後再設回了不透明。
當然就不會體現alpha值啦。

正確寫法,把paint.setAlpha(0x40);和 paint.setColor(Color.BLUE);兩行位置調換就ok了!
 protected void onDraw(Canvas canvas)
 {
     super.onDraw(canvas);
     Paint paint = new Paint();
     paint.setColor(Color.BLUE);
     paint.setAlpha(0x40);
     canvas.drawText("Hello", 0, 0, paint);
 }

沒有留言 :