2016-03-29 46 views
1

即時通訊嘗試在ViewGroup上製作漸變Alpha。將Alpha漸變應用於整個ViewGroup

我知道我可以使用GradientDrawable,但只適用於背景。

我需要將alpha應用於整個視圖,包括子視圖。

就像阿爾法設置爲作爲的ViewGroup我可以這樣做:

_relativeLayout.setAlpha(1); 

如果我設置背景漸變阿爾法它並不適用於它的子視圖。

我怎樣才能得到相同的效果,但具有漸變?

在此先感謝。

+0

覆蓋'dispatchDraw'或您的自定義'ViewGroup' – pskink

+0

而且我應該在那裏做什麼的'draw'方法呢?它是否也將alpha應用於其子視圖? – Nanoc

+1

請參閱http://stackoverflow.com/questions/31135714/make-complex-view-gradiently-transparent,我向codehare.io發送了一些代碼,但它現在似乎已經停止(http://codeshare.io/ZQHcj)或者它可能永遠是死的,我知道 – pskink

回答

1

你可以實現一個簡單的DFS算法來做到這一點

void setAlphaTransitively(View view, float alpha) { 
    if (view == null) { 
     return; 
    } 

    view.setAlpha(alpha); 
    if (view instanceof ViewGroup) { 
     ViewGroup viewGroup = (ViewGroup) view; 
     for (int index = 0; index < viewGroup.getChildCount(); index++) { 
      View child = viewGroup.getChildAt(index); 
      setAlphaTransitively(child, alpha); 
     } 
    } 
}