4

我正在尝试将 aScaleAnimation应用于 a View,但我有一个非传统的要求:我只想缩放视图的一个非常特定的区域。

使用现有的ScaleAnimation类,我可以轻松地统一缩放视图。我还可以设置一个枢轴点来缩放视图。下面是一个例子:

从底部缩放的笑脸

这很简单。但我希望通过仅缩放视图的特定区域(或者在这种情况下是笑脸中间的一个小水平矩形)来实现以下目标:

特定区域缩放的笑脸

我挖掘了源代码ScaleAnimation,以下函数似乎负责缩放:

protected void applyTransformation(float interpolatedTime, Transformation t) {
    float sx = 1.0f;
    float sy = 1.0f;

    if (mFromX != 1.0f || mToX != 1.0f) {
        sx = mFromX + ((mToX - mFromX) * interpolatedTime);
    }
    if (mFromY != 1.0f || mToY != 1.0f) {
        sy = mFromY + ((mToY - mFromY) * interpolatedTime);
    }

    if (mPivotX == 0 && mPivotY == 0) {
        t.getMatrix().setScale(sx, sy);
    } else {
        t.getMatrix().setScale(sx, sy, mPivotX, mPivotY);
    }
}

由于这个函数只是简单地对矩阵应用缩放运算,我在想有某种矩阵运算可以用来编写自定义缩放动画,但是我缺乏线性代数知识。这个问题的解决方案可能要简单得多,因为似乎其他人会遇到这个问题,但我一直无法找到任何解决方案。提前致谢。

4

1 回答 1

1

矩阵变换整个位图。您不能使用单个矩阵缩放区域。

于 2013-04-26T06:30:49.540 回答