0

我正在尝试使用 ScaleGestureDetectorsetScaleX和方法来缩放视图。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 的自定义比例检测器?

4

2 回答 2

1

我不确定我明白你想要什么。ScaleGestureDetector简单地将用户的触摸事件转换为比例因子。

如何使用比例因子取决于您。如果您遇到限制,那么限制在于您使用比例值的方式。即您的代码正在缩放视图,而不是ScaleGestureDetector.

您在上面复制的代码只是将触摸倾斜应用于触摸事件,以便它不会检测到不用于缩放的触摸。

于 2013-01-25T15:19:40.697 回答
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 轴的比例。

于 2013-01-26T00:52:04.560 回答