0

我创建了一个垂直ViewPager,使用ViewPage.PageTransformer并交换了X和Y坐标。 (我使用this approach垂直ViewPager。停止滚动过去某个点

现在,我想要做的是停止滚动在某个点(我想最后一个视图只占屏幕高度的65%,但全宽)。 通常,在这种情况下,我会覆盖getPageWidth(),但由于我的宽度和高度现在有点混杂,所以当我这样做时,我的视图占用了屏幕高度和宽度的65%。

那么我该如何解决这个问题?

谢谢!

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

} 

回答

0

嗨,据我了解你们停在某一点,而无需在反弹时。将overscroll(从不)方法添加到所需的viewpager。并管理对象的边距。尽可能地包装内容。

+0

你能提供我如何做到这一点的例子吗? –

+0

setOverScrollMode(OVER_SCROLL_NEVER);添加这一个,并管理您的项目在XML我不在PC – Izvorski

+0

我从来没有overscroll,但更改xml不起作用,因为重写'getPageWidth'改变视图的宽度和高度@Izvorski –