13

Kullanarak NestedScrollView ile sorunsuz bir şekilde AppBarLayout Uyguladığım bir AppBarLayout ve NestedScrollView. Aşağı kaydırıldığında NestedScrollView'ı istiyorum, AppBarLayout Genişletmeden hemen önce NestedScrollView durağı olmadan AppBarLayout da incelikli bir şekilde genişletilmelidir; Bunu yapmak için ikinci bir Uçuş/Kaydırma gereklidir.AppBarLayout.Behavior

Yığın akışını kontrol ediyorum ve bu çözümü oldukça alakalı buldum ve kullanılabilir. Ancak bunun yerine NestedScrollView ise, RecyclerView. https://stackoverflow.com/a/32454407/3286489

Temelde kodu alıp hafifçe değiştirdim ve ayrıca aşağıdaki kod olarak AppBarLayout öğesini da dikkate almak için hızı> 8000 kontrol etmek için kullanılır.

public final class FlingBehavior extends AppBarLayout.Behavior { 
    private boolean isPositive; 

    public FlingBehavior() { 
    } 

    public FlingBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) { 
     if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) { 
      velocityY = velocityY * -1; 
     } 

     if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) { 
      consumed = false; 
     } 
     return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed); 
    } 

    @Override 
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) { 
     super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); 
     isPositive = dy > 0; 
    } 
} 

Bu işler, ancak ideal değil. Ben sadece, NestedScrollView onu kaydırmanın en üstüne ulaştığında, ApplingLayout'taki Fling'i (yani consumed = false'u iade et) başlatmak (devam) istiyorum. Bunu onNestedFling'de nasıl kontrol edebilirim?

Teşekkürler.

+0

Merhaba bunun için herhangi bir çözüm var mi .. ?? –

+0

Hayır. Yalnızca yukarıdaki gibi bir geçici çözüm olarak. Belki de bu soruya daha yüksek oranda derecelendirme talebi bu sorunu çözmek için biraz dikkat çekicidir. – Elye

+0

Evet, tam olarak aynı soruyu burada yayınladım .http: //stackoverflow.com/questions/38119661/fling-with-nestedscrollview-and-appbarlayout –

cevap

1

Sorunun bu depoda kitaplıkları ile çözülmüştür NestedScrollView Ve NestedScrollingChild

if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) { 
     consumed = false; 
    } 


    if (target instanceof NestedScrollingChild && Math.abs(velocityY) > 8000) { 
     consumed = false; 
    }