2016-03-29 16 views
1

an, indem Sie versuchen, einen Farbverlauf Alpha über eine ViewGroup zu erstellen.Wenden Sie den Alpha-Farbverlauf auf die gesamte ViewGroup

Ich weiß, ich kann GradientDrawable verwenden, aber das gilt nur für den Hintergrund.

Ich brauche das Alpha für die gesamte Ansicht, einschließlich Unteransichten.

Genau wie die Alpha auf die Einstellung, wie ich Viewgroup mit tun können:

_relativeLayout.setAlpha(1); 

Wenn ich einen Hintergrundgradienten alpha gesetzt es anwenden tut es Subviews.

Wie bekomme ich den gleichen Effekt, aber mit einem Gradienten?

Vielen Dank im Voraus.

+0

Überschreibung 'dispatchDraw' oder' draw' Methoden der benutzerdefinierten 'ViewGroup' – pskink

+0

Und was soll ich da tun? Wird es das Alpha auch auf seine Subviews anwenden? – Nanoc

+1

siehe http://stackoverflow.com/questions/31135714/make-complex-view-gradient-transparent, ich habe Code an codeshare.io geschickt, aber es scheint, dass es jetzt down ist (http://codeshare.io/ZQHcj) oder vielleicht ist es tot für immer, ich weiß, – pskink

Antwort

1

Sie können einen einfachen DFS-Algorithmus implementieren, es zu tun

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); 
     } 
    } 
}