ScaleGestureDetector这个类是专门用来检测两个手指在屏幕上做缩放的手势用的,最简单的应用就是用来缩放图片或者缩放网页。
这个类通常与GestureDetector一起存在,用来处理复杂的手势操作。
通常是单手指和双手指操作,所以通常存在一个判断手指个数然后分发事件的处理方法
例:
public boolean onTouchEvent(MotionEvent event) {
mNumFin = event.getPointerCount();
Log.i("ASDFGHJKL", "------"+mNumFin);
if(1 == mNumFin){
mGestureDetector.onTouchEvent(event);
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
endGesture();
}
}else if(2 == mNumFin){
mScaleGestureDetector.onTouchEvent(event);
}
return false;
}
它存在两个实现接口OnScaleGestureListener,和SimpleOnScaleGestureListener
OnScaleGestureListener必须实现三个实现方法
1.onScale(ScaleGestureDetector detector) 返还类型是boolean
2.onScaleBegin(ScaleGestureDetector detector) 返还类型是boolean 这里返回true ,才能进入onscale()函数
3.onScaleEnd(ScaleGestureDetector detector) 返还类型是void
SimpleOnScaleGestureListener只需重写一个方法
1.onScale(ScaleGestureDetector detector) 返还类型是boolean
例:
/**
* 多点
*/
private class MultiGestureListener implements OnScaleGestureListener{
@Override
public boolean onScale(ScaleGestureDetector detector) {
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
// 返回true ,才能进入onscale()函数
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
float oldDis = detector.getPreviousSpan();
float curDis = detector.getCurrentSpan();
if(oldDis - curDis >50){
//small
Toast.makeText(MainActivity.this, "缩小", 1000).show();
}else if(oldDis - curDis < -50){
//max
Toast.makeText(MainActivity.this, "放大", 1000).show();
}
}
}
class ScaleGesture extends ScaleGestureDetector.SimpleOnScaleGestureListener {//双手指操作
@Override
public boolean onScale(ScaleGestureDetector detector) {
detector.getCurrentSpan();//两点间的距离跨度
detector.getCurrentSpanX();//两点间的x距离
detector.getCurrentSpanY();//两点间的y距离
detector.getFocusX(); //
detector.getFocusY(); //
detector.getPreviousSpan(); //上次
detector.getPreviousSpanX();//上次
detector.getPreviousSpanY();//上次
detector.getEventTime(); //当前事件的事件
detector.getTimeDelta(); //两次事件间的时间差
detector.getScaleFactor(); //与上次事件相比,得到的比例因子
return true;
}
就这样