2016-03-29 21 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); 
     } 
    } 
}