拉伸/缩放视图/位图的特定区域

时间:2013-04-25 22:46:20

标签: android matrix scale android-animation android-view

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

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

smiley scaled from bottom

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

smiley with specific region scaled

我挖掘了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);
    }
}

由于这个函数只是将一个缩放操作应用于矩阵,我以为我可以使用某种矩阵运算来编写自定义比例动画,但我的线性代数知识缺乏。对此的解决方案可能要简单得多,因为好像其他人会遇到这个问题,但我找不到任何解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:1)

矩阵转换整个位图。您无法使用单个矩阵缩放区域。