首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >完整的Gmail三片段动画场景的工作示例?

完整的Gmail三片段动画场景的工作示例?
EN

Stack Overflow用户
提问于 2012-09-04 05:00:52
回答 6查看 29.9K关注 0票数 130

我正在寻找一个完整的工作示例,我将其称为“Gmail三片段动画”场景。具体地说,我们希望从两个片段开始,如下所示:

在一些UI事件(例如,点击片段B中的某些内容)时,我们希望:

  • 片段A滑出屏幕到左侧
  • 片段B滑到屏幕的左边缘并收缩以占据片段A腾出的斑点
  • 片段C从屏幕右侧滑入并占据片段B腾出的斑点

而且,在按下BACK按钮时,我们希望这组操作被反转。

现在,我已经看到了很多部分实现;我将在下面回顾其中的四个。除了不完整之外,它们都有自己的问题。

@Reto Meier为同样的基本问题贡献了this popular answer,表明您将使用带有FragmentTransactionsetCustomAnimations()。对于两个片段的场景(例如,您最初只看到片段A,并希望使用动画效果将其替换为新的片段B),我完全同意。但是:

  • 由于您只能指定一个" in“和一个"out”动画,我看不出您将如何处理三个片段的场景所需的所有不同动画。
  • <objectAnimator>在他的示例代码中使用以像素为单位的硬连接位置,考虑到不同的屏幕大小,这似乎是不切实际的,但是setCustomAnimations()需要动画资源。排除了在Java
  • 中定义这些东西的可能性,我不知所措的是,用于缩放的对象动画师如何与用于按百分比分配空间的LinearLayout中的android:layout_weight之类的东西绑定在一起,
  • 我不知所措,不知道片断C在一开始是如何处理的(GONEandroid:layout_weight of 0?预置动画到0的比例?还有别的吗?)

@Roman Nurik指出,you can animate any property,包括你自己定义的那些。这可以帮助解决硬连接位置的问题,代价是创建自己的自定义布局管理器子类。这对一些人有帮助,但我仍然对Reto的其余解决方案感到困惑。

this pastebin entry的作者展示了一些诱人的伪代码,基本上是说所有三个片段最初都驻留在容器中,片段C在一开始就通过hide()事务操作隐藏起来。然后,当UI事件发生时,我们show() C和hide() A。然而,我不明白这是如何处理B改变大小的事实的。它还依赖于这样一个事实,即您显然可以向同一容器添加多个片段,我不确定这是否是长期可靠的行为(更不用说它应该破坏findFragmentById(),尽管我可以接受)。

this blog post的作者指出,Gmail根本没有使用setCustomAnimations(),而是直接使用对象动画(“你只需改变根视图的左边距+改变右视图的宽度”)。然而,这仍然是一个两个片段的解决方案AFAICT,并且实现再次显示了以像素为单位的硬连接尺寸。

我将继续努力,所以有一天我可能会自己回答这个问题,但我真的希望有人已经为这个动画场景制定了三个片段的解决方案,并可以发布代码(或指向该代码的链接)。Android中的动画让我想要拔出我的头发,你们中看过我的人都知道这基本上是徒劳的努力。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12253965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档