【问题标题】:Animating a group of children in a viewgroup为视图组中的一组孩子设置动画
【发布时间】:2023-03-03 12:46:01
【问题描述】:

我正在开发自定义 ViewGroup。

这个 ViewGroup 有一堆孩子。我需要制作一些动画并改变它们的位置。我了解 Android 动画仅移动位图而不是真实对象。我一直试图通过关注各种资源来移动它们,但失败了。

到目前为止我对 ViewGroup 所做的事情:

  1. 衡量孩子和 ViewGroup
  2. 在 onLayout 中定位子项

我还想做什么

使用自定义动画来移动一小部分孩子。我正在使用自定义动画对象,因为我需要移动一堆视图,并且我正在对所有视图一起应用 translationX。我知道的另一种选择是在所有这些上启动一个单独的动画,并且想到它让我认为它不会被优化。

问题

视图动画效果很好,但它们的实际位置保持不变。所以下次我尝试做同样的动画,但是在新的坐标上,它不起作用。因为,他们的位置还没有更新。

我做了什么

  1. 使用onAnimationEndlayout 每个孩子到新的左、上、右和下位置。所有视图都消失了
  2. onAnimationEnd 上,将translationX 重置为零,然后开始重新定位视图。拨打view.setTranslationX(0f)无效

有人可以帮助我以正确的方式执行此操作吗?谢谢

【问题讨论】:

  • 尝试使用ObjectAnimator,它支持library 用于API 11以下...
  • 您手动调用 child.layout():对吗?所以在制作动画时也要这样做
  • 你试过Animation.setFillAfter吗?
  • @GopalRao 我无法使用 ObjectAnimator,因为我正在尝试对一堆对象应用动画转换。尽管如此,我试过了,结果是一样的
  • 我建议先改变你的子视图的位置,然后监听 onPreDrawListener() 并在那里开始你的动画..

标签: android android-layout android-animation android-view


【解决方案1】:

在您的子视图上调用 layout() 动画时

【讨论】:

  • 在动画期间调用 layout() 不是很贵吗?
  • 这解决了这个问题,但是我后来改变了我的整个实现以使用translationX,然后简单地在动画结束的最终位置布局
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多