2011-01-27 147 views
19

是否可以設置並獲取佈局的Alpha /不透明度及其所有子視圖?我不是在談論背景。在相對佈局中說一組視頻控件,例如播放,暫停和進度條。設置佈局的Alpha /不透明度

我可以使用動畫淡入和淡出,但想知道是否有我可以使用的直接方法。

回答

59

您可以使用帶有0持續時間和setFillAfter選項的AlphaAnimation在佈局上設置alpha,並設置其子視圖(或任何其他視圖)。

例子:

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
// And then on your layout 
yourLayout.startAnimation(alpha); 

您可以使用一個動畫多個組件以節​​省內存。再次執行reset()以再次使用,或者clearAnimation()刪除alpha。

雖然它看起來很粗糙並且被黑了,但它實際上是一種很好的方法,可以在set ov視圖上設置alpha,而不需要太多內存或處理器時間。

雖然不確定要獲取當前的alpha值。

+0

感謝。我正在使用動畫,但是一旦動畫完成而不是使用setFillAfter方法,我就設置了對象可見性。 –

+0

它似乎打破了動畫(如果在動畫中運行)。任何解決這個問題? – Sufian

+0

作爲一種解決方法,我使用了一個半透明圖像集作爲'View'的背景。 – Sufian

6

亞歷克斯的解決方案的工作原理,但另一種方法是創建一個自定義視圖,在繪製其子級之前調用Canvas.saveLayerAlpha()。請注意,在Android 3.0的有一個新的View.setAlpha()API :)

+0

謝謝,期待setAlpha方法。我更喜歡其他語言的東西。 –

15

這裏是橫跨所有版本(thanks to @AlexOrlov)的方法:

@SuppressLint("NewApi") 
public static void setAlpha(View view, float alpha) 
{ 
    if (Build.VERSION.SDK_INT < 11) 
    { 
     final AlphaAnimation animation = new AlphaAnimation(alpha, alpha); 
     animation.setDuration(0); 
     animation.setFillAfter(true); 
     view.startAnimation(animation); 
    } 
    else view.setAlpha(alpha); 
} 

顯然,如果API小於11您可以創建一個自定義視圖,在繪製其子項之前調用(thanks to @RomainGuy)。

+0

這是完美的,謝謝 – Selecsosi

+0

謝謝Takhion。添加@SuppressLint(「NewApi」):) – Nifhel

+0

使用:ViewCompat.setAlpha(View,float)。 – TomerBu

3

現在您可以使用ViewCompat.setAlpha(View, float)進行此操作。

+0

來自doc的引用:「*在API 11之前,這將不起作用。」 – Pang

+0

沒有這樣的方法。我已將最小api設置爲11.但它具有ViewCompat.getAlpha(anyView)方法 –

0

對不起,我的答案,但如果你想阿爾法可以使用ViewCompat類

ViewCompat.setAlpha(查看視圖,浮動阿爾法)

ViewCompat是在程序兼容性V4