bordi dissolvenza lavorano solo sulla parte superiore e sinistra
-
12-10-2019 - |
Domanda
Ho fatto una ImageView
personalizzato che supporta lo scorrimento di base attraverso le chiamate a View.scrollBy()
in un GestureDetector
. Volevo aggiungere un feedback al raggiungimento di contorni a scorrimento in modo da ho permesso dissolvenza con:
setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);
, ma le opere dissolvenza come mi aspettavo solo sui bordi sinistro e superiore, mentre quelle inferiori e di destra non sbiadiscono. Sono sicuro che i bordi non sono fuori dallo schermo perché la vista è impostato su fill_parent in altezza e larghezza. Allora, cosa c'è che non va?
EDIT: abilitando soltanto orizzontali conferma verticali / bordi dissolvenza che solo all'inizio / bordo sinistro vengono trascinati. Ora sto cercando di leggere View.java (6870 un on) ...
Soluzione
Sembra che il problema è nella getBottomFadingEdgeStrength()
e getRightFadingEdgeStrength()
, o meglio, nel fatto che io non li override per lavoro con la mia vista personalizzata.
Questi metodi protetti dicono draw()
di vista quando per disegnare le dissolvenze (e quanto fortemente - vedere ciò che un ScrollView
fa quando ci si avvicina al limite di scorrimento).
Per superiore e bordi sinistro è facile perché il limite è 0
in entrambi i casi e le opere implementazione predefinita (nella sua on / off modo), ma per gli altri due ho bisogno di sostituire i metodi di prendere in considerazione il mio scrolling limiti (nel mio caso, le dimensioni disegnabili).
Altri suggerimenti
A che questo è vecchio, ma un lavoro rapido giro rispetto a override metodi è quello di utilizzare i gradienti e relativa disposizione nella vostra xml. Qui di seguito potete trovare una versione astratta, non è possibile copiare e incollare ma dovrebbe inoltrare il messaggio. Spiacente ho digitato il tutto a mano.
<!-- 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>