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)。这只是一个简单解释的例子。