java - 使用 ScaleGestureDetector 时放大太多后无法缩小

标签 java android

我使用了带有 ScaleGestureDector 类的自定义 View 。我的问题是当我以 4.5 倍放大时,我的自定义布局无法缩小。

这是我的代码:

private class ScaleGestureListener
            extends ScaleGestureDetector.SimpleOnScaleGestureListener {

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        float scaleFactor = mScaleFactor * detector.getScaleFactor();

        mScaleFactor = scaleFactor;
        setScaleX(getScaleX() * mScaleFactor);
        setScaleY(getScaleY() * mScaleFactor);

        invalidate();
        return true;
    }

这个问题有什么解决方案吗?我想将我的布局至少放大 4.5 倍

最佳答案

代替:

float scaleFactor = mScaleFactor * detector.getScaleFactor();

这样做:

float scaleFactor = Math.max(4.5F, mScaleFactor * detector.getScaleFactor());

这确保您的最小缩放比例因子为 4.5

编辑:我误解了你的问题。看起来您不应该跟踪 mScaleFactor。 API 为您完成繁重的工作。 根据 API,getScaleFactor() 返回 从上一个缩放事件到当前事件的缩放因子。

因此,当您在字段中跟踪 mScaleFactor 时,会出现以下问题:

// With these two lines, you're multiplying the variable mScaleFactor.
// Suppose that it was 3, and we're zooming out by 0.66666666
// Now, mScaleFactor is 2.
float scaleFactor = mScaleFactor * detector.getScaleFactor();
mScaleFactor = scaleFactor;

// Here, you're multiplying scaleX and scaleY by mScaleFactor (by 2. This effectively zooms in)
// You should only be multiplying them by 0.666666666 (effectively zooming out).
setScaleX(getScaleX() * mScaleFactor);
setScaleY(getScaleY() * mScaleFactor);

invalidate();
return true;

所以你的 body 应该是这样的:

public boolean onScale(ScaleGestureDetector detector) {
    float scaleFactor = detector.getScaleFactor();

    setScaleX(getScaleX() * scaleFactor);
    setScaleY(getScaleY() * scaleFactor);

    invalidate();
    return true;
}

关于java - 使用 ScaleGestureDetector 时放大太多后无法缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27541461/

相关文章:

java - 我应该如何针对 "expression+"模式运行操作?

android - 如何确定处理器的最大频率(Android)

android - phonegap-facebook-插件 : only works when native FB app is not installed (Android)

android - 是否有计划将 Android PdfRenderer 包含在支持库中?

java - 包裹、类加载器和读取空值

java - 为什么 After Advice 在方法调用之前得到打印

android - RadioGroup 有两列有十个 RadioButtons

安卓 12 崩溃。华为服务

java - 在 JTable 中显示变量数据

java - 没有链接的类图