android viewpager显示三个item(横屏使用)-笔记

这篇笔记介绍了如何在Android中使用ViewPager显示三个item,并在横屏模式下实现拖动和放大功能。通过自定义PagerAdapter,重写必要方法,并创建DragImageView和ImgViewPager两个自定义类,使得每个item支持直接拖动操作。
摘要由CSDN通过智能技术生成

简单做个笔记,效果如下:



实现2步:

1.在继承PagerAdapter里重写收下方法:

	@Override
	public float getPageWidth(int position) {
		return (float) 0.33;
	}


2.设置动画:

	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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值