2015-05-31 5 views
8

In Bezug auf die RippleDrawable für Android L, https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html, gibt es eine Möglichkeit, weg zu maskieren, um den Welleneffekt in der Ansicht zu enthalten. Die Maskierung erfolgt wieRippleDrawable Maskenfarbe, wozu dient es?

<ripple android:color="#ff0000ff"> 
    <item android:drawable="@drawable/white" /> 
</ripple> 

Wir es auch

mit Maske könnte
<ripple android:color="#ff0000ff"> 
    <item android:drawable="@drawable/black" /> 
</ripple> 

Wie in dem Dokument erwähnt, wird die Maskenschicht nicht auf dem Bildschirm gezeichnet, sondern nur den Welleneffekt Maskierung entfernt. Ich bin neugierig, warum sollte man dort eine Farbe (Weiß oder Schwarz oder irgendetwas) einstellen? Gibt es irgendeine von uns, die eine Farbe als Maske setzt, oder ist es in der Tat irgendein Wert?

Hofft jemand aufklären ... Danke!

Antwort

6

eine undurchsichtige Farbe für Ihre Maske - ob @android:color/white ist, #ff000000 oder #ff123456 spielt keine Rolle - bedeutet, dass Sie Maskierung gegen ein völlig undurchsichtig Rechteck, das die gleiche Größe wie Ihre ziehbar ist. Dies ist der effizienteste Rendering-Pfad für Ripple-Masken.

+0

Dank @alanv. Ich habe auch versucht, # 00000000, die Maskierung funktioniert immer noch. Scheint auf Transparent nicht undurchsichtig, ändert den Maskierungseffekt. – Elye

+0

Das könnte ein Fehler im schnellen Pfad sein (oder wahrscheinlicher in ColorDrawable.getOpacity()). Auf welcher Version siehst du dieses Verhalten? Hast du M Preview ausprobiert? Angenommen, Sie haben keine separate '@android: id/mask'-Ebene, die Verwendung einer transparenten Inhaltsschicht sollte zu einer unsichtbaren Welligkeit führen, da sie gegen eine leere Bitmap maskiert ist. – alanv