2015年9月21日 星期一

[Note] setAlpha VS setImageAlpha

前情提要:
app中的某顆按鈕alpha值只會是76或255,
alpha = 76看起來是半透明
alpha = 255看起來是原圖/不透明
(由於有版權的問題因此無法直接放圖)


但是在某機台上,
即使我們將他的alpha值設定為255,顯示的顏色仍為半透明;
本以為是framework層的問題,
(也許的確有相關,畫view的方法或先後順序造成的影響)
經過資料查詢後發現是調用的方法不佳。


====================================================


以下直接就程式碼做解釋,傳入的是OptionButton的型別:

原程式碼:
Drawable d = getBackground();
// loading the drawable here.
if (d == null) d = getDrawable();
if (d != null) d.setAlpha(isEnabled() ? 255 : 76);

先得到該按鈕的drawable後、再將drawable的alpha值做設定。

====================================================

修改後:
this.setImageAlpha(isEnabled() ? 255 : 76);

直接將OptionButton視為一個ImageView,
設定該View的透明度。
由於我們的OptionButton背景皆為透明的,
所以這邊不討論有背景的情形。
有背景的情形可參考:Android ImageView - setAlpha(float) vs setImageAlpha(int)

====================================================

原本的setAlpha可能被Google發現有某些問題,
可能是繪製效率或方法不佳,
所以在API 16後就被捨棄了。


花了蠻多時間去解決這個問題的,
特別的是,
app只有放在某機台上會有繪製錯誤的問題。


有興趣的朋友可以參考:
http://www.stormzhang.com/android/2014/03/16/best-practices-for-using-alpha

沒有留言:

張貼留言