2013-06-11 10 views
11

So habe ich meine Aktivität, die einen Haupt-ViewPager hat und innerhalb des ViewPagers hat jede Seite den ganzen Inhalt als ScrollView und in diesem ScrollView gibt es einen anderen ViewPager.Android ViewPager mit ScrollViews mit ViewPagers in den ScrollViews

klingen Dies könnte verrückt, aber im Grunde die äußere ViewPager enthält News-Artikel, und die Artikel sind lange so ein Scroll ist, und innerhalb des Scrollview gibt es mehrere Vorschaubilder/Bilder, die sie durch und streichen können.

Ich habe ein paar verschiedene benutzerdefinierte ViewPagers mit verschiedenen Touch-Event-Abhörung ausprobiert, aber kann nicht scheinen, es perfekt zu bekommen. Es wird entweder alle Berührungsereignisse vollständig absorbieren, so dass das vertikale Scrollen der ScrollView in diesem Bereich nicht funktioniert, oder es wird wirklich empfindlich/schwierig sein, die innere Scrollansicht horizontal zu scrollen.

Wer hat eine perfekte Lösung?

+0

Haben Sie Ihr Problem gelöst? Ich versuche zu tun, was genau du versucht hast. – tasomaniac

+0

Ja meine Lösung ist unten. Lass es mich wissen falls du Hilfe benötigst! – egfconnor

+0

Ich habe diese Lösung versucht, aber es gibt mir Probleme mit anklickbaren Elementen innerhalb des Scroll-Layouts. Wenn ich vertikal auf einem anklickbaren Element blättern kann, scrollt die Bildlaufansicht nicht. – tasomaniac

Antwort

12

Falls jemand will meine Lösung wissen:

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; 
    } 
} 
} 

und die äußere meisten ViewPager ist:

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

Dieser Code rettete mein Leben! Danke :) –

+0

Froh, dass es dir geholfen hat! – egfconnor

+0

Hey ich habe ein Problem mit einer Bildlaufansicht und Pager darin anzeigen, aber vertikale Bildlauf funktioniert nicht einmal mit ur custon scrollview ?? – Tony

Verwandte Themen