【问题标题】:Stretch/Scale a Specific Region of View/Bitmap拉伸/缩放视图/位图的特定区域
【发布时间】:2013-04-25 22:46:20
【问题描述】:

我正在尝试将ScaleAnimation 应用到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);
    }
}

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

【问题讨论】:

  • 你找到了吗?分享吧。

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


【解决方案1】:

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

【讨论】:

  • 所以,这不能用矩阵来完成。或许还有办法在android中做这样的改造?
  • 这取决于你想做什么。对于您的示例,您可以使用 9-png 来定义哪些区域可以拉伸,哪些区域不能。将 9-png 作为 Drawable 加载,用它填充视图,而不是缩放动画,动画视图大小。还有其他方法,你可以把你的图像剪成3个图像,中间是中间的薄片,然后在中间有缩放动画,更多的顶部和底部以匹配中间的大小。这取决于你需要做什么。我假设只是一个例子,而不是你真正需要的笑脸示例
  • 是的,我想我可以尝试为视图大小设置动画!将此添加到您的答案中,因为这似乎是目前解决问题的正确方法。
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 2012-04-30
  • 2020-10-30
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2013-09-01
相关资源
最近更新 更多