Ich habe eine vertikale ViewPager
erstellt, mit ViewPage.PageTransformer
und X-und Y-Koordinaten vertauschen. (Ich benutze this approach10)Vertikaler ViewPager. Stoppen Scrollen vorbei an bestimmten Punkt
Nun, was ich will, ist zu stoppen Scrollen an einem bestimmten Punkt (Ich möchte die letzte Ansicht nur 65% der Bildschirmhöhe zu nehmen, aber die volle Breite). Normalerweise würde ich getPageWidth()
in diesem Fall überschreiben, aber da meine Breite und Höhe derzeit irgendwie durcheinander sind, wenn ich das tue, nimmt meine Ansicht 65% sowohl der Höhe als auch der Breite des Bildschirms.
Also, wie soll ich das beheben?
Vielen Dank!
MyViewPager.java
public class MyViewPager extends ViewPager {
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setPageTransformer(true, new VerticalPageTransformer());
setOverScrollMode(OVER_SCROLL_NEVER);
}
private class VerticalPageTransformer implements ViewPager.PageTransformer {
@Override
public void transformPage(View view, float position) {
if (position < -1) {
view.setAlpha(0);
} else if (position <= 1) {
view.setAlpha(1);
view.setTranslationX(view.getWidth() * -position);
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
} else {
view.setAlpha(0);
}
}
}
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 onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapXY(ev));
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
swapXY(ev);
return intercepted;
}
}
MyPagerAdapter.java
public class MyPagerAdapter extends PagerAdapter {
private Context context;
private LayoutInflater layoutInflater;
public MyPagerAdapter(Context context) {
this.context = context;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
if (position == 0) {
View view = layoutInflater.inflate(R.layout.item_profile_picture, container, false);
container.addView(view);
return view;
}
else {
View view = layoutInflater.inflate(R.layout.item_profile_info, container, false);
container.addView(view);
return view;
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((FrameLayout) object);
}
@Override
public float getPageWidth(int position) {
if (position == 1) return (0.65f);
return super.getPageWidth(position);
}
}
können Sie Beispiel dafür, wie ich das tun würde? –
setOverScrollMode (OVER_SCROLL_NEVER); fügen Sie dieses ein und verwalten Sie Ihre Artikel in der XML Ich bin nicht auf PC – Izvorski
Ich habe das Overscroll nie, aber ändern Xml funktioniert nicht, weil überschreiben 'getPageWidth' ändert sowohl die Breite und Höhe der Ansicht @Izvorski –