2011-01-17 5 views
3

Ich habe eine benutzerdefinierte ImageView, die grundlegende Scrollen durch Anrufe zu View.scrollBy() in einem GestureDetector unterstützt. Ich wollte ein Feedback auf das Erreichen des Scrollens Grenzen hinzufügen, damit ich mit aktivierter Verblassen:Fading Kanten arbeiten nur auf der Oberseite und links

setVerticalFadingEdgeEnabled(true); 
setHorizontalFadingEdgeEnabled(true); 

aber das Verblassen funktioniert, wie ich nur auf oberen und linken Rand erwartet, während unten und Richtigen nicht verblassen. Ich bin mir sicher, dass diese Kanten nicht vom Bildschirm abweichen, weil die Ansicht in Höhe und Breite auf "fill_parent" eingestellt ist. Also, was ist falsch?


BEARBEITEN: Wenn nur vertikale/horizontale Fadingkanten aktiviert sind, wird bestätigt, dass nur die oberen/linken Kanten gezeichnet werden. Jetzt versuche ich, View.java (6870 an on) ...

Antwort

3

Es scheint, zu lesen, dass das Problem in getBottomFadingEdgeStrength() und getRightFadingEdgeStrength(), oder besser gesagt, in der Tatsache, dass ich nicht außer Kraft setzte sie mit meiner benutzerdefinierten Ansicht zu arbeiten.

Diese geschützten Methoden sagen View draw(), wann die Überblendungen zu zeichnen (und wie stark - sehen Sie, was ein ScrollView tut, wenn Sie in der Nähe der Scrollgrenze kommen).

Für obere und linke Kanten ist es einfach, da das Limit in beiden Fällen 0 ist und die Standardimplementierung funktioniert (in seiner Ein/Aus-Art), aber für die anderen beiden muss ich die Methoden überschreiben, um meine eigenen zu berücksichtigen scrollende Grenzen (in meinem Fall die Zeichenmaße).

0

Ein Wissen, das ist alt, aber eine schnelle Umgehung im Vergleich zu überschreiben Methoden ist, Gradienten und relative Layout in Ihrem XML verwenden. Unten finden Sie eine abstrahierte Version, die Sie nicht kopieren und einfügen können, aber sie sollte die Nachricht weiterleiten. Tut mir leid, ich habe alles manuell eingegeben.

<!-- object with fading edges in layout --> 
<RelativeLayout> 
    <ImageView> 
    <LinearLayout background="gradient_left" layout_alignParentStart="true"> 
    <LinearLayout background="gradient_right" layout_alignParentEnd="true"> 
</RelativeLayout> 


<!-- gradient left xml in drawable--> 
<shape> 
    <gradient startColor="#000" endColor:"@android:color/transparent" angle="0" 
</shape> 


<!-- gradient right xml in drawable --> 
<shape> 
    <gradient startColor="#000" endColor:"@android:color/transparent" angle="180" 
</shape> 
Verwandte Themen