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);
}
}