是否可以設置並獲取佈局的Alpha /不透明度及其所有子視圖?我不是在談論背景。在相對佈局中說一組視頻控件,例如播放,暫停和進度條。設置佈局的Alpha /不透明度
我可以使用動畫淡入和淡出,但想知道是否有我可以使用的直接方法。
是否可以設置並獲取佈局的Alpha /不透明度及其所有子視圖?我不是在談論背景。在相對佈局中說一組視頻控件,例如播放,暫停和進度條。設置佈局的Alpha /不透明度
我可以使用動畫淡入和淡出,但想知道是否有我可以使用的直接方法。
您可以使用帶有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值。
亞歷克斯的解決方案的工作原理,但另一種方法是創建一個自定義視圖,在繪製其子級之前調用Canvas.saveLayerAlpha()。請注意,在Android 3.0的有一個新的View.setAlpha()API :)
謝謝,期待setAlpha方法。我更喜歡其他語言的東西。 –
這裏是橫跨所有版本(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)。
現在您可以使用ViewCompat.setAlpha(View, float)
進行此操作。
來自doc的引用:「*在API 11之前,這將不起作用。」 – Pang
沒有這樣的方法。我已將最小api設置爲11.但它具有ViewCompat.getAlpha(anyView)方法 –
對不起,我的答案,但如果你想阿爾法可以使用ViewCompat類
ViewCompat.setAlpha(查看視圖,浮動阿爾法)
ViewCompat是在程序兼容性V4
感謝。我正在使用動畫,但是一旦動畫完成而不是使用setFillAfter方法,我就設置了對象可見性。 –
它似乎打破了動畫(如果在動畫中運行)。任何解決這個問題? – Sufian
作爲一種解決方法,我使用了一個半透明圖像集作爲'View'的背景。 – Sufian