【问题标题】:How to animate the edge of a view in Android?如何在Android中为视图的边缘设置动画?
【发布时间】:2018-09-20 16:12:16
【问题描述】:

我的 UI 上有一个ImageView,我想为其左边缘设置动画:图像本身保持不动,但其左侧部分变得不可见,显示下方的视图。 (想想 CSS 中的负边距)。

我怎样才能做到这一点?

我实际上想要的是这样的前后效果: https://zurb.com/playground/twentytwenty

我的计划是堆叠 2 个 imageView,当我在顶部为 imageView 的边缘设置动画时,下面的 imageView 会部分显示。

除了动画边缘之外的想法也可以,只要我能得到效果。

【问题讨论】:

  • 只需在 ImageVIew 上方放置一个黑色视图,然后将其从左侧移入,并用它覆盖 ImageView 的一部分
  • @VladyslavMatviienko 这不是后视图,而是图像下方的视图。
  • 如果是在图片下面,那你怎么能看到呢?
  • 哦,我明白了,我再给个主意
  • 您可以将该背景视图放置在某个容器的前景中,并将容器宽度从 0 更改为您需要的任何值,同时将容器内视图的负右边距更改为相同的值

标签: android animation view


【解决方案1】:

首先,您需要创建调整大小的动画,使视图大小像这样改变

注意这是一个 Kotlin 代码,如果需要宽度,则需要更改高度,您需要替换视图

 class ResizeAnimation(var view: View, val targetHight: Int) : Animation() {
    val startWidth: Int = view.height

     override fun applyTransformation(interpolatedTime: Float, t: Transformation) {
        val newHight = (startWidth + (targetHight - startWidth) * interpolatedTime).toInt()
        view.layoutParams.height = newHight
        view.requestLayout()
    }


    override fun willChangeBounds(): Boolean {
        return true
    }
}

在你的活动中的下一个调用它就像任何其他动画示例一样

val anime = ResizeAnimation(view, commentViewHight)
            anime.duration = 250
            anime.fillAfter =true
            view.startAnimation(anime)

因为你处理图像视图就像上面的例子一样,将图像中的比例类型更改为“适合末端”

请注意,您不能在oncreate() 中使用此代码,您需要先确保视图可见以计算您的高度/宽度

【讨论】:

  • 动画高度/宽度似乎不适用于“FIT_END”模式,图像被挤压到角落,而不是被剪裁。不过,动画 clipBounds 似乎可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多