我尝试使用ScaleGestureDetector使用setScaleX
和setScaleY
方法缩放视图。如果您只想将视图缩放5到7次,它可以正常工作。但是有一个很大的问题,你需要比原版更大的视图20-30。 ScaleGestureDetector没有考虑视图的当前比例,因此无法无限扩展 - onScaleBegin不会被触发。
我确定这是因为ScaleGestureDetector源代码中的这些行:
if (!mInProgress && span >= mMinSpan &&
(wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) {
...
mInProgress = mListener.onScaleBegin(this);
}
使用ScaleGestureDetector有一种简单的方法可以将视图缩放20-30倍,还是有适用于Android的自定义缩放检测器?
答案 0 :(得分:1)
我不确定我明白你想要什么。 ScaleGestureDetector
只是将用户的触摸事件转换为比例因子。
由您决定如何使用比例因子。如果您遇到限制,则限制在于您使用比例值的方式。即您的代码正在缩放视图,而不是ScaleGestureDetector
。
您上面复制的代码只是在触摸事件中应用触摸slop,因此它不会检测不适合缩放的触摸。
答案 1 :(得分:1)
这是一个非常好用的扩展实现。我只用一个缩放手势就可以将视图缩放20倍。
private final Matrix mMatrix = new Matrix();
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getPointerCount() == 2) {
float scale = (float) Math.sqrt(getScaleX());
float focalX = (event.getX(0) + event.getX(1)) / 2;
float focalY = (event.getY(0) + event.getY(1)) / 2;
mMatrix.setScale(scale, scale, focalX, focalY);
event.transform(mMatrix);
return mScaleGestureDetector.onTouchEvent(event);
}
return false;
}
在这种情况下,尺度x和y都相等。为了使用不同的比例,只需将setScale方法的第二个参数更改为y轴上的比例。