简单做个笔记,效果如下:
实现2步:
1.在继承PagerAdapter里重写收下方法:
@Override
public float getPageWidth(int position) {
return (float) 0.33;
}
mViewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
@Override
public void transformPage(View page, float position) {
float v = Math.abs(position - 0.33f);
float v1 = (float) (2 * (v * v));
page.setScaleY(1 - v1);
page.setScaleX(1 - v1);
}
});
注1:0.33是屏幕的三分之一,float v1 = (float) (2 * (v * v));是计算而已,
详见可见这
注2:效果图中前后都加了一个空白的item,每个item也设置了padding值。
给上全的Adapter:
public class ContractVpHAdapter extends PagerAdapter {
private List<String> mDataList;
private List<DragImageView> mViewList;
private Context mContext;
private DisplayImageOptions mOptions;
private ImgViewPager mImgViewPager;
public ContractVpHAdapter(Context c, List<String> data, ImgViewPager imgViewPager) {
mContext = c;
mDataList = data;
mImgViewPager = imgViewPager;
mViewList = new ArrayList<DragImageView>();
notifyDataView();
mOptions = new DisplayImageOptions.Builder()
// .showImageOnLoading(R.drawable.icon_apk)//
// .showImageOnFail(R.drawable.icon_apk)//
.cacheInMemory(true)//
.cacheOnDisk(true)//
.bitmapConfig(Bitmap.Config.RGB_565)//
.build();
mImgViewPager.addOnPageChangeListener(new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
for (int i = 0; i < mViewList.size(); i++) {
if (null != mViewList.get(i)) {
mViewList.get(i).setCanDrag(false);
}
}
if ((position + 1) < mViewList.size()) {
mViewList.get(position + 1).setCanDrag(true);
}
}
});
}
@Override
public float getPageWidth(int position) {
return (float) 0.33;
}
@Override
public int getCount() {
return mViewList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public void destroyItem(ViewGroup arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(mViewList.get(arg1));
}
@Override
public View instantiateItem(ViewGroup arg0, int arg1) {
((ViewPager) arg0).addView(mViewList.get(arg1));
return mViewList.get(arg1);
}
public void notifyDataView() {
mViewList.clear();
if (mDataList.isEmpty()) {
notifyDataSetChanged();
return;
}
mViewList.add(getImg());
for (int i = 0; i < mDataList.size(); i++) {
getView(i);
}
mViewList.add(getImg());
notifyDataSetChanged();
}
private void getView(int i) {
DragImageView imageView = getImg();
ImageLoader.getInstance().displayImage(mDataList.get(i), imageView, mOptions);
mViewList.add(imageView);
if (i == 1) {
imageView.setCanDrag(true);
}
}
private DragImageView getImg() {
DragImageView imageView = new DragImageView(mContext);
imageView.setOnMovingListener(mImgViewPager);
imageView.setCanDrag(false);
imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
imageView.setPadding(Tool.dip2px(mContext, 12), 0, Tool.dip2px(mContext, 12), 0);
return imageView;
}
}
上面有二个自定义类DragImageView、ImgViewPager,为了实现可以直接在Item里直接拖动,放大。
DragImageView:
/**
* @ClassName: DragImageView
* @Description: 带放大、缩小、移动效果的ImageView
*
*/
public class DragImageView extends ImageView {
/**
* 初始化状态常量
*/
public static final int STATUS_INIT = 0;
/** 拖拉照片模式 */
private static final int MODE_DRAG = 1;
/** 放大缩小照片模式 */
pri