Ich habe zwei Viewpager implementiert, einen Viewpager von android, um horizontal nach links und rechts zu wischen. und zweitens ist ein benutzerdefinierter vertikaler Ansichtspager innerhalb des Fragments, um das Bild nach oben und unten zu wischen. Ich kann vertikal wo auch immer wischen, aber ich kann Viewpager nicht horizontal wischen. horizontaler Viewpager kann nur vom Bildschirmrand gezogen werden. Wie kann man den horizontalen Viewpager horizontal verschieben?Viewpager kann nur vom Rand des Bildschirms gezogen werden
Hier ist meine benutzerdefinierte vertikale Ansichtspager.
public class VerticalViewPager extends ViewPager {
public VerticalViewPager(Context context) {
super(context);
init();
}
public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
// The majority of the magic happens here
setPageTransformer(true, new VerticalPageTransformer());
// The easiest way to get rid of the overscroll drawing that happens on the left and right
setOverScrollMode(OVER_SCROLL_NEVER);
}
private class VerticalPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1]
view.setAlpha(1);
// Counteract the default slide transition
view.setTranslationX(view.getWidth() * -position);
//set Y position to swipe in from top
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
/**
* Swaps the X and Y coordinates of your touch event.
*/
private MotionEvent swapXY(MotionEvent ev) {
float width = getWidth();
float height = getHeight();
float newX = (ev.getY()/height) * width;
float newY = (ev.getX()/width) * height;
ev.setLocation(newX, newY);
return ev;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
swapXY(ev); // return touch coordinates to original reference frame for any child views
return intercepted;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapXY(ev));
}}
Dank für die Antwort danken. Ich habe versucht, diese Bibliothek in meinem Projekt zu verwenden. – taufan
Sie sind willkommen. Wenn diese Bibliothek funktioniert, akzeptiere und stimme ab. –