0

ViewPage.PageTransformerを使用し、X座標とY座標を入れ替えて、垂直座標ViewPagerを作成しました。 (私は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

this libraryを使用してこの問題を解決しました。

0

こんにちは。 overscroll(never)メソッドを必要なビューページに追加します。オブジェクトのマージンを管理します。可能な限りコンテンツをラップします。

+0

私はそれをどのように行うのかの例を挙げることができますか? –

+0

setOverScrollMode(OVER_SCROLL_NEVER);これを追加してxmlでアイテムを管理する私はPCにいない – Izvorski

+0

私はオーバースクロールを決してしていないが、 'getPageWidth'をオーバーライドするとビューの幅と高さが変わるのでxmlを変更することはできません@Izvorski –

関連する問題