Android - OnTouchListener

DEMO:双指放大或缩小文字

Main

tv.setOnTouchListener(new ZoomListener());  //设置自定义类的触摸监听


自定义触摸监听类:ZoomListener implements OnTouchListener 


public class ZoomListener implements OnTouchListener {

	private int finger = 0;
	private float oldDist;
	private float textSize = 0;

	TextView tv = null;

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		tv = (TextView) v;  //获得监控控件
		if(textSize == 0){  
			textSize = tv.getTextSize();  //初始化textSize
		}
			
		switch (event.getAction() & MotionEvent.ACTION_MASK) {  //判断触摸事件类型
			case MotionEvent.ACTION_DOWN:  //第一个手指按下
				finger = 1;  
				break;
			case MotionEvent.ACTION_UP:  //最后一个手指抬起
				finger = 0;  
				break;
			case MotionEvent.ACTION_POINTER_UP:  //抬起多个手指中的一个手指
				finger -= 1;  
				break;
			case MotionEvent.ACTION_POINTER_DOWN:  //再按下一个手指
				oldDist = spacing(event);
				finger += 1;
				break;

			case MotionEvent.ACTION_MOVE:  //手指在移动
				if (finger >= 2) {  //当屏幕上至少存在两个手指时进行放大
					float newDist = spacing(event);  //计算手指间距
					if (newDist > oldDist + 1) {  //手指存在抖动,造成一直放大或缩小,+1可以避免这一情况。
						zoom(newDist / oldDist);  //计算方法倍数
						oldDist = newDist;  //更新oldDist
					}
					if (newDist < oldDist - 1) {
						zoom(newDist / oldDist);
						oldDist = newDist;
					}
				}
				break;
		}
		return true;
	}

	private void zoom(float f) {  //放大或缩小textSize
		textSize *= f;
		if(textSize > 100) textSize = 100;  //设置阈值
		if(textSize < 10) textSize = 10;
		tv.setTextSize(textSize);
	}

	private float spacing(MotionEvent event) {  //屏幕上有两个手指时,可通过event.getX(index)等计算间距。
		float x = event.getX(0) - event.getX(1);
		float y = event.getY(0) - event.getY(1);
		return FloatMath.sqrt(x * x + y * y);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值