android 自定义ImageView实现图片手势滑动、多点触摸缩放

这两天研究了一下多点触控缩放,也参考了网上几个例子,但觉得不够完美。


先推荐大家看一篇很详细的介绍:http://blog.csdn.net/jj120522/article/details/8467810


这里面的例子有两个问题:

1. onClick事件和onLongClick时间,会在图像缩放或者移动时同时出发(这给我们带来很大困扰)

2. 图像缩小回弹成原大小时,图像会变形


于是我自己对代码做了一些修正。


//自己获取OnClickeListener & OnLongClickListener,在GuestureDetector里面调用,不让系统去调用
private OnClickListener mOnClickListener;
private OnLongClickListener mOnLongClickListener;

@Override
public void setOnClickListener(OnClickListener l) {
	mOnClickListener = l;
}

@Override
public void setOnLongClickListener(OnLongClickListener l) {
	mOnLongClickListener = l;
}


	/***
	 * touch 事件
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {

		// 因为onTouchEvent()不知道 长时间移动或双手指缩放和长按事件的区别,所以配合GestureDetector来处理事件
		mGestureDetector.onTouchEvent(event);

		/** 处理单点、多点触摸 **/
		switch (event.getAction() & MotionEvent.ACTION_MASK) {

		// 多点触摸
		case MotionEvent.ACTION_POINTER_DOWN:
			onPointerDown(event);
			break;

		case MotionEvent.ACTION_UP:

			mode = MODE.NONE;
			break;

		// 多点松开
		case MotionEvent.ACTION_POINTER_UP:

			mode = MODE.NONE;
			/** 执行缩放还原 **/
			if (isScaleAnim)
				doScaleAnim();

			break;
		}

		return true;
	}

	/** 防止onClick、LongClick跟缩放动作一起触发 */
	@SuppressWarnings("deprecation")
	GestureDetector mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
		@Override
		public boolean onDown(MotionEvent e) {
			onTouchDown(e);
			return false;
		}

		@Override
		public void onLongPress(MotionEvent e) {
			if (mOnLongClickListener != null)
				mOnLongClickListener.onLongClick(DragImageView.this);
		}

		@Override
		public boolean onSingleTapConfirmed(MotionEvent e) {
			if (mOnClickListener != null)
				mOnClickListener.onClick(DragImageView.this);
			return false;
		}

		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
			onTouchMove(e2);
			return false;
		}
	});




下载地址:

http://download.csdn.net/detail/kkmike999/6887565

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值