2017-06-07 17 views
0

私はvertical viewpagerを使用していますが、feedly android appのように滑らかではありません。feedlyによってどのコンポーネントが使用されているのかわかりません。feedly android appのような垂直アニメーションを作成する方法

ご協力いただければ幸いです。

パブリッククラスVerticalViewPagerは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 { 
    private static final float MIN_SCALE = .75f; 
    @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 <= 0) { // [-1,0] 
      // Use the default slide transition when moving to the left page 
      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); 
      view.setScaleX(1); 
      view.setScaleY(1); 

     } else if (position <= 1) { // [0,1] 
      view.setAlpha(1); 

      // Counteract the default slide transition 
      view.setTranslationX(view.getWidth() * -position); 


      // Scale the page down (between MIN_SCALE and 1) 
      float scaleFactor = MIN_SCALE 
        + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 


/*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)); 
    final boolean toHandle = super.onTouchEvent(swapXY(ev)); 
    // Return MotionEvent to normal 
    swapXY(ev); 
    return toHandle; 
} 


@Override 
public boolean canScrollVertically(int direction) { 
    return true; 
} 


@Override 
public boolean canScrollHorizontally(int direction) { 
    return false; 
} 

}私はあなたがこのリンクで行かなければならないと思います

+1

あなたの質問にいくつかのコードを追加しますはい、あなたが –

+0

チャンスを貼り付けた場合のuは、カスタムビューのページャを実装しています。あなたがこれまでにしたことをあなたの努力を示してください。 – lelloman

+0

はStackOverflowのためにようこそ、UIスレッド上であまりにも多くの計算をやっているあるコード –

答えて

0

を拡張し、私は呼んでいるあなたのxml 2スクロール機能で考えると、それは問題を与える理由です。

https://stackoverflow.com/questions/14326317/view-pager-not-smooth-when-embedded-within-scrollview 
+0

私はscrollviewを使用していません。 Viewpagerはその垂直スワイプだけを処理しています –

関連する問題