Android viewpager完美画廊
画廊实现:
1. ViewPager.PageTransformer类
public class ScalePageTransformer implements ViewPager.PageTransformer{
public static final float MAX_SCALE = 1.0f;
public static final float MIN_SCALE = 0.8f;
public static final float MAX_ALPHA = 1.0f;
public static final float MIN_ALPHA = 0.5f;
private boolean alpha = true;
private boolean scale = true;
@Override
public void transformPage(View page, float position) {
if (position < -1) {
position = -1;
} else if (position > 1) {
position = 1;
}
float tempScale = position < 0 ? 1 + position : 1 - position;
if(scale){
float slope = (MAX_SCALE - MIN_SCALE) / 1;
float scaleValue = MIN_SCALE + tempScale * slope;
page.setScaleX(scaleValue);
page.setScaleY(scaleValue);
}
if(alpha){
//模糊
float alope = (MAX_ALPHA - MIN_ALPHA) / 1;
float alphaValue = MIN_ALPHA + tempScale * alope;
page.setAlpha(alphaValue);
}
}
/***
* 改变模糊和改变大小
* @param alpha
* @param scale
*/
public void setScaleSizeType(boolean alpha, boolean scale){
this.alpha = alpha;
this.scale = scale;
}
}
布局文件
<android.support.v4.view.ViewPager
android:id="@+id/id_viewpager"
android:layout_width=“match_parent”
android:layout_marginLeft=“80dp”
android:layout_marginRight=“80dp”
android:clipChildren=“false”
android:layout_height=“wrap_content”
android:layout_gravity=“center” />
Activity设置adpter:
mViewPager = $(R.id.id_viewpager);
fatherview = $(R.id.fatherview);
mViewPager.setPageMargin(10);
mViewPager.setOffscreenPageLimit(3);
ScalePageTransformer mScaleAlphaPageTransformer = new ScalePageTransformer();
mScaleAlphaPageTransformer.setScaleSizeType(true, true);
mViewPager.setPageTransformer(true, mScaleAlphaPageTransformer);
mViewPager.setCurrentItem(startPostion);
mViewPager.setAdapter(new MyAdapter(MoBanActivity.this,list));
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
if (fatherview != null) {
fatherview.invalidate();
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
fatherview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.performClick();
return mViewPager.dispatchTouchEvent(event);
}
});