2013-06-11 18 views
11

Bu yüzden bir ViewPager ve ViewPager içinde her sayfanın bir ScrollView ve ScrollView içinde tüm içeriğe sahip ViewPager içinde olan benim etkinlik var başka bir ViewPager var.Android ViewPager ScrollViews içinde ScrollViews ile ScrollViews içinde

Bu çılgınca gelebilir ancak temel olarak ViewPager öğesi dışa aktarma makaleleri içerir ve makaleler uzun olduğundan ScrollView vardır ve ScrollView'ın içinde hızlıca kaydırılabilen çok sayıda küçük resim/resim vardır.

Farklı dokunma olayı ele geçirme özelliğine sahip birkaç farklı özel ViewPager denedim, ancak mükemmel görünmüyor. Tamamen tüm dokunma olaylarını absorbe eder, böylece ScrollView'un dikey kaydırması o bölgede çalışmaz veya iç tarafa yatay kaydırma yapmak için gerçekten dokunaklı/zor olacaktır.

Herkes mükemmel bir çözümü var mı?

+0

sorununuzu çözdü mü? Tam olarak denediğin şeyi yapmaya çalışıyorum. – tasomaniac

+0

Evet, çözümüm aşağıda. Yardıma ihtiyacınız olursa bana bildirin! – egfconnor

+0

Bu çözümü denedim, ancak kaydırma düzenindeki tıklanabilir öğelerle ilgili sorun yaşıyorum. Tıklanabilir bir öğe üzerinde dikey olarak kaydırdığımda, kaydırma görünümü kaydırılmıyor. – tasomaniac

cevap

12

durumda herkes benim çözüm bilmek istiyor:

public class CustomScrollView extends ScrollView { 
private GestureDetector mGestureDetector; 
View.OnTouchListener mGestureListener; 

public CustomScrollView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mGestureDetector = new GestureDetector(context, new YScrollDetector()); 
    setFadingEdgeLength(0); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    return super.onInterceptTouchEvent(ev) 
      && mGestureDetector.onTouchEvent(ev); 
} 

// Return false if we're scrolling in the x direction 
class YScrollDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
      float distanceX, float distanceY) { 
     if (Math.abs(distanceY) > Math.abs(distanceX)) { 
      return true; 
     } 
     return false; 
    } 
} 
} 

ve dış çoğu ViewPager geçerli:

public class NestingViewPager extends ViewPager { 

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

public NestingViewPager(final Context context) { 
    super(context); 
} 

@Override 
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
    if (v != this && v instanceof ViewPager) { 
     return true; 
    } 
    return super.canScroll(v, checkV, dx, x, y); 
} 
} 
+2

Bu kod hayatımı kurtardı! Teşekkürler :) –

+0

Size yardımcı olduğuna sevindim! – egfconnor

+0

Hey bir kaydırma görünümü ile bir sorun var ve onun içinde çağrı cihazı görüntülemek ama verticall kaydırma ur custon scrollview ile bile çalışmıyor? – Tony