Android 从转换中排除ViewGroup,但一个特定子级除外
我试图从共享元素返回转换中排除一个视图组,比如说回收器视图。但问题是,我不希望“回收者”视图的所有子级都排除在外,我希望特定的“回收者”视图子级包含转换Android 从转换中排除ViewGroup,但一个特定子级除外,android,animation,android-animation,android-transitions,shared-element-transition,Android,Animation,Android Animation,Android Transitions,Shared Element Transition,我试图从共享元素返回转换中排除一个视图组,比如说回收器视图。但问题是,我不希望“回收者”视图的所有子级都排除在外,我希望特定的“回收者”视图子级包含转换 Slide transition = new Slide(Gravity.END); transition.excludeTarget(recyclerView, true); transition.addTarget(ImageView.class); setExitTransition(transition); setReturnT
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
我不明白为什么上面的代码不起作用。请告诉我您是否有任何想法或方法来实现这一目标?有什么问题吗?
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
问题来自函数if
语句:
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
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)
被忽略
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
为什么第一条语句没有通过?
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
因为addTarget(Class)
mtargetypes
字段,因此mTargetIds
和mTargets
都将保留为空
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
而是执行addTarget(int)
,这将mTargetIds
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
因此,以下是您的过渡情况:
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
Slide transition = new Slide(Gravity.END);
transition.addTarget(R.id.some_imageview);
setExitTransition(transition);
setReturnTransition(transition);
无需执行转换.excludeTarget()
,因为如中所述:
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
设置targetID会将转换限制为仅侦听具有这些ID的视图并对其执行操作。具有不同ID或没有ID的视图将被忽略
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)代码>谢谢你的解释。如果视图组具有背景,则仍会将背景添加到过渡。你知道为什么吗?你能贴一张有这种行为的gif吗?很抱歉,我刚刚意识到它能按预期工作。但我的实际问题仍然存在。我正在尝试在recyclerview上实现回拉动画。我将viewPager作为回收器视图项。viewPager包含一个imageview。如果viewPager位置大于0,我将尝试进行幻灯片转换。但不知何故,它并没有使幻灯片过渡。你可以从地图上看到它。如果你能帮我或给我一些建议,我将不胜感激。否则我就接受你的答案。我想知道你为什么要执行addTarget(Class)
addTarget(Class)
将转换应用于从该类分配的所有视图,即ImageView
的所有子类都将参与转换。但据我所知,您只需要对一个视图执行转换,即您必须应用addTarget(view)
重载。我现在正在使用addTarget(view)。这只是一个简单解释的例子。