废话不多说直接贴代码
1.要在viewpager和父类的xml属性中设置android:clipChildren="false"
<RelativeLayout
android:id="@+id/lockgp_desktop_detail_viewpager_rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false">
<com.flkeyguard.lockgp.widget.ClipViewPager
android:id="@+id/lockgp_desktop_detail_viewpager"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:clipChildren="false"
android:overScrollMode="never" />
</RelativeLayout>
2.
viewPager = (ClipViewPager) findViewById(R.id.lockgp_desktop_detail_viewpager);
lockGpDeskTopDetailAdapter = new LockGpDeskTopDetailAdapter(this,previewList,mAsyncImageLoader,handler);
viewPager.setAdapter(lockGpDeskTopDetailAdapter);
viewPager.setOffscreenPageLimit(previewList.size());
viewPager.setPageTransformer(true, new ScaleTransformer());
动画如下
public class ScaleTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@Override
public void transformPage(View page, float position) {
if (position < -1 || position > 1) {
page.setAlpha(MIN_ALPHA);
page.setScaleX(MIN_SCALE);
page.setScaleY(MIN_SCALE);
} else if (position <= 1) { // [-1,1]
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
if (position < 0) {
float scaleX = 1 + 0.15f * position;
Log.d("google_lenve_fb", "transformPage: scaleX:" + scaleX);
page.setScaleX(scaleX);
page.setScaleY(scaleX);
} else {
float scaleX = 1 - 0.15f * position;
page.setScaleX(scaleX);
page.setScaleY(scaleX);
}
page.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
}
}
}
重点:
lockGpDeskTopDetailAdapter = new LockGpDeskTopDetailAdapter(this,previewList,mAsyncImageLoader,handler);
viewPager.setAdapter(lockGpDeskTopDetailAdapter);
lockGpDeskTopDetailAdapter.setData();然后刷新的方法,不然滑动动画会失效
3.设置左右的viewpager可以点击,touch
首先让父类也就是viewpager的父类
viewpagerRl.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return viewPager.dispatchTouchEvent(event);
}
});
然后重写viewpager,我们这边取名为 ClipViewPager
public class ClipViewPager extends ViewPager {
public ClipViewPager(Context context) {
super(context);
}
public ClipViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_UP) {
View view = viewOfClickOnScreen(ev);
if (view != null) {
setCurrentItem(indexOfChild(view));
}
}
return super.dispatchTouchEvent(ev);
}
/**
* @param ev
* @return
*/
private View viewOfClickOnScreen(MotionEvent ev) {
int childCount = getChildCount();
int[] location = new int[2];
for (int i = 0; i < childCount; i++) {
View v = getChildAt(i);
v.getLocationOnScreen(location);
int minX = location[0];
int minY = getTop();
int maxX = location[0] + v.getWidth();
int maxY = getBottom();
float x = ev.getX();
float y = ev.getY();
if ((x > minX && x < maxX) && (y > minY && y < maxY)) {
return v;
}
}
return null;
}
}
这样就可以了
。