2015-09-28 106 views
2

我需要始終在回滾視圖中突出顯示中心項目,同時通過向上滾動進行滾動。如何在Android中滾動時放大Recycler查看中心項目?

+1

更新有更具體的問題,你的問題,並添加你有什麼至今一些代碼。你會因這個問題而退縮,並失去再次提問的能力。 –

+0

這樣的東西http://stackoverflow.com/questions/29487382/scale-up-item-in-recyclerview-to-overlaps-2-adjacent-items-android ...我需要突出中心項目在水平回收站查看。是否有任何方法請引導我? – Android

回答

1

您應該遵循此代碼,這有助於我在回收視圖中放大中心項目。

[![public class CenterZoomLayoutManager extends LinearLayoutManager { 

    private final float mShrinkAmount = 0.15f; 
    private final float mShrinkDistance = 0.9f; 

    public CenterZoomLayoutManager(Context context) { 
     super(context); 
    } 

    public CenterZoomLayoutManager(Context context, int orientation, boolean reverseLayout) { 
     super(context, orientation, reverseLayout); 
    } 


    @Override 
    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { 
     int orientation = getOrientation(); 
     if (orientation == VERTICAL) { 
      int scrolled = super.scrollVerticallyBy(dy, recycler, state); 
      float midpoint = getHeight()/2.f; 
      float d0 = 0.f; 
      float d1 = mShrinkDistance * midpoint; 
      float s0 = 1.f; 
      float s1 = 1.f - mShrinkAmount; 
      for (int i = 0; i < getChildCount(); i++) { 
       View child = getChildAt(i); 
       float childMidpoint = 
         (getDecoratedBottom(child) + getDecoratedTop(child))/2.f; 
       float d = Math.min(d1, Math.abs(midpoint - childMidpoint)); 
       float scale = s0 + (s1 - s0) * (d - d0)/(d1 - d0); 
       child.setScaleX(scale); 
       child.setScaleY(scale); 
      } 
      return scrolled; 
     } else { 
      return 0; 
     } 
    } 

    @Override 
    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) { 
     int orientation = getOrientation(); 
     if (orientation == HORIZONTAL) { 
      int scrolled = super.scrollHorizontallyBy(dx, recycler, state); 

      float midpoint = getWidth()/2.f; 
      float d0 = 0.f; 
      float d1 = mShrinkDistance * midpoint; 
      float s0 = 1.f; 
      float s1 = 1.f - mShrinkAmount; 
      for (int i = 0; i < getChildCount(); i++) { 
       View child = getChildAt(i); 
       float childMidpoint = 
         (getDecoratedRight(child) + getDecoratedLeft(child))/2.f; 
       float d = Math.min(d1, Math.abs(midpoint - childMidpoint)); 
       float scale = s0 + (s1 - s0) * (d - d0)/(d1 - d0); 
       child.setScaleX(scale); 
       child.setScaleY(scale); 
      } 
      return scrolled; 
     } else { 
      return 0; 
     } 

    } 
} 

中心水平視圖 enter image description here

相關問題