2015-05-06 8 views
9

Ho ignorato overScrollBy metodo ScrollView in base alla seguente post:overScrollBy non sempre riprendersi in Lollipop piattaforma (5.x)

http://jasonfry.co.uk/blog/android-overscroll-revisited/

Si sta lavorando bene su altre versioni della piattaforma, ma Il lecca-lecca non è in grado di riprendersi se viene applicato un movimento di lancio su ScrollView.

Chiunque ha riscontrato questo problema e ha trovato una soluzione alternativa?

Chiamato nel costruttore setOverScrollMode(OVER_SCROLL_ALWAYS);

codice Qui pertinenti che ho sottoposto a override in mia classe personalizzata ScrollView:

@Override 
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, 
           int scrollY, int scrollRangeX, int scrollRangeY, 
           int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { 
    return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, 
      scrollRangeX, scrollRangeY, maxOverScrollX, OVER_SCROLL_AMOUNT, 
      isTouchEvent); 
} 

Grazie.

+0

puoi pubblicare il codice corrente? –

+0

Sembra che funzioni come previsto per me, puoi espandere esattamente cosa sta andando storto e pubblicare anche del codice? – memoizr

+0

È stato aggiornato il codice pertinente, si scorre normalmente sui limiti e quindi si applica il movimento di lancio e la vista a scorrimento si ferma. – Niko

risposta

4

Ho inserito le modifiche tra KitKat e Lollipop ScrollView. Il seguente codice risolve il mio problema.

@TargetApi(21) 
@Override 
public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { 
    // Not consumed means it wasn't handled because ScrollView 
    // doesn't take over scrolling bounds into scroll range, 
    // so we fling it ourselves to get it bounce back 
    if (getOverScrollMode() == OVER_SCROLL_ALWAYS && !consumed) { 
     fling((int) velocityY); 

     return true; 
    } else { 
     return super.dispatchNestedFling(velocityX, velocityY, consumed); 
    } 
} 
+0

Non ha funzionato per me su Lollipop 5.1. Così ho annullato quella funzione con solo queste 2 linee: 'fling ((int) velocity); return true; '. E ora funziona. –

Problemi correlati