您的位置:首页 > 移动开发 > Android开发

Android - OnTouchListener

2016-02-25 10:19 417 查看
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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: