【问题标题】:Exclude ViewGroup from transition except one specific child从过渡中排除 ViewGroup,除了一个特定的孩子
【发布时间】:2017-08-11 09:06:49
【问题描述】:

我正在尝试从共享元素返回转换中排除视图组,比如说回收者视图。但问题是我不希望回收器视图的所有子级都排除我希望特定的回收器视图子级包含过渡。

Slide transition = new Slide(Gravity.END); 
transition.excludeTarget(recyclerView, true); 
transition.addTarget(ImageView.class); 
setExitTransition(transition); 
setReturnTransition(transition);

我不明白为什么上面的代码不起作用。如果您有任何想法或任何方法可以实现这一目标,请告诉我?

【问题讨论】:

  • 这段代码有什么用?
  • 它只是排除了整个recyclerview。我的一个 recyclerview 项目中有一个 imageview。它不尊重这个transition.addTarget(ImageView.class);

标签: android animation android-animation android-transitions shared-element-transition


【解决方案1】:

有什么问题?

问题来自Transition#captureValues()函数if语句:

void captureValues(ViewGroup sceneRoot, boolean start) { clearValues(start); if ((mTargetIds.size() > 0 || mTargets.size() > 0) && (mTargetNames == null || mTargetNames.isEmpty()) && (mTargetTypes == null || mTargetTypes.isEmpty())) { ... } else { captureHierarchy(sceneRoot, start); } ... }

第一条语句没有通过,因此 else 案例被执行,这使得您的 addTarget(ImageView.class) 被忽略。

为什么第一条语句没有通过?

因为addTarget(Class) will change mTargetTypes 字段,因此mTargetIdsmTargets 都将留空。

改为执行addTarget(int),其中will change mTargetIds

因此,您的过渡将如下所示:

Slide transition = new Slide(Gravity.END); transition.addTarget(R.id.some_imageview); setExitTransition(transition); setReturnTransition(transition);

无需执行transition.excludeTarget(),因为如addTarget() docs中所述:

设置 targetIds 会将 Transition 限制为仅侦听具有这些 ID 的视图并对其进行操作。具有不同 ID 或没有任何 ID 的视图将被忽略。

【讨论】:

  • 感谢您的精彩解释。如果视图组有背景,这仍然会将背景添加到过渡中。你有什么想法吗?
  • 你能发布一个有这种行为的 gif 吗?
  • 很抱歉,我刚刚意识到它按预期工作。但我的实际问题仍然存在。我正在尝试在 recyclerview 上实现回拉动画。我有 viewPager 作为回收器视图项。 viewPager 包含一个 imageview。如果 viewPager 位置大于 0,我正在尝试进行幻灯片转换。但不知何故,它不会进行幻灯片转换。您可以从gif 看到它。如果您能对此提供帮助或给我一些想法,我将不胜感激。否则我会接受你的回答。
  • 我想知道你为什么要表演addTarget(Class)addTarget(Class) 将使转换应用于从该类分配的所有视图,即ImageView 的所有子类都将参与转换。但据我了解,您只需要为一个视图执行转换,即您必须应用 addTarget(View) 重载。
  • 我现在正在使用 addTarget(View)。这只是一个简单解释的例子。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2012-11-05
  • 2020-09-25
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多