Android RecycleView实现根据view在视野中的位置指定大小
先给recycleView添加一个OnScrollListener
mScreenWidth = getResources().getDisplayMetrics().widthPixels;
recyclerView.addOnScrollListener(mOnScrollListener);
private int mScreenWidth;
private static final float MIN_SCALE = .95f;
private static final float MAX_SCALE = 1.5f;
private LinearLayoutManager mLinearLayoutManager;
private int HEIGHT=200,WIDTH=300;
private RecyclerView recyclerView;
private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
final int childCount = recyclerView.getChildCount();
for (int i = 0; i < childCount; i++) {
CardView child = (CardView) recyclerView.getChildAt(i);
RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) child.getLayoutParams();
lp.height=getPixelsFromDp(HEIGHT);
lp.width = getPixelsFromDp(WIDTH);
int left = child.getLeft();
int right = mScreenWidth - child.getRight();
final float percent = left < 0 || right < 0 ? 0 : Math.min(left, right) * 1f / Math.max(left, right);
float scaleFactor = MIN_SCALE + Math.abs(percent) * (MAX_SCALE - MIN_SCALE);
child.setLayoutParams(lp);
child.setScaleY(scaleFactor);
child.setScaleX(scaleFactor);
}
}
};
private int getPixelsFromDp(int x){
DisplayMetrics metrics=new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
return (x*metrics.densityDpi)/DisplayMetrics.DENSITY_DEFAULT;
}