2013-07-16 17 views
7

Mam przewijania wewnątrz przewijania. Plik xml jest taki, że w tym drugim przewijanym przewijaniu nie jest płynnie przesuwany. może dać na to rozwiązanie. Próbowałem wiele rozwiązań podanych w Internecie, ale nie działa.Przewiń widok wewnątrz przewijania w systemie Android Wydawnictwo

+3

nie sądzę przewijania widoku wewnątrz Scrollview zadziała – KOTIOS

+0

u może mi powiedzieć o exact requirmrnt – KOTIOS

+2

To nie jest dobra praktyka, aby mieć 2 scrollViewy, które przewijają się w tym samym kierunku w sobie nawzajem, nawet jeśli działa –

Odpowiedz

20

Spróbuj tego kodu. Jest praca dla me`

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 
    findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
return false; 
} 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 

// Disallow the touch request for parent scroll on touch of 
// child view 
v.getParent().requestDisallowInterceptTouchEvent(true); 
return false; 
} 
});` 
+0

Działa doskonale, dziękuję! – deimos1988

+0

dla mnie to zauważa, childScrollView nie otrzyma ontouch cokolwiek robię. – SjoerdvGestel

+0

Dzięki jego pracy dla mnie zgodnie z oczekiwaniami. –

5

Innym rozwiązaniem jest użycie tej klasy jako klasy nadrzędnej

public class NoInterceptScrollView extends ScrollView { 

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

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return false; 
    } 

} 
+0

Wolałbym to jako prostsze rozwiązanie –

+0

jesteś moim bohaterem! – Draelach

+0

Idealny .. Po długiej walce, okazało się, że to jest dobre i najlepsze .. bez wysiłku .. – Brendon

0

musiałem poprawić rozwiązanie Deepthi za ponieważ nie działa na mnie; Domyślam się, że mój przewijany widok jest pełen widoków (mam na myśli widoki podrzędne wykorzystujące całą przestrzeń rysowania przewijania). Aby uczynić go w pełni funkcjonalny, musiałem też zabronić dotykowy wniosek o dominującej przewijania na dotyk wszystkich dzieci poglądów wewnątrz widoku przewijania dziecka:

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
    } 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // Disallow the touch request for parent scroll on touch of 
     // child view 
     v.getParent().requestDisallowInterceptTouchEvent(true); 
     return false; 
    } 
});` 
childScrollviewRecursiveLoopChildren(parentScrollView, childScrollView); 
public void childScrollviewRecursiveLoopChildren(final ScrollView parentScrollView, View parent) { 
    for (int i = ((ViewGroup) parent).getChildCount() - 1; i >= 0; i--) { 
     final View child = ((ViewGroup) parent).getChildAt(i); 
     if (child instanceof ViewGroup) { 
      childScrollviewRecursiveLoopChildren(parentScrollView, (ViewGroup) child); 
     } else { 
      child.setOnTouchListener(new View.OnTouchListener() { 
       public boolean onTouch(View v, MotionEvent event) 
       { 
        // Disallow the touch request for parent scroll on touch of 
        // child view 
        parentScrollView.requestDisallowInterceptTouchEvent(true); 
        return false; 
       } 
      }); 
     } 
    } 
} 
Powiązane problemy