1

我想排除视图组让我们说从共享元素的回收视图返回转换。但事情是我不希望所有的回收者观点的孩子排除我想要特定的回收者观点孩子包括过渡。从转换中排除除一个特定子项外的ViewGroup

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

我不明白为什么上面的代码不工作。请让我知道,如果你有任何想法或任何方式来实现这一目标?

+0

你用这段代码得到了什么? – azizbekian

+0

它只是排除整个recyclerview。我的一个回收器视图项目中有一个imageview。它不尊重这个'transition.addTarget(ImageView.class);' – santalu

回答

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 changemTargetTypes字段,从而既mTargetIdsmTargets将被留为空。

取而代之,执行addTarget(int),其中will changemTargetIds

因此,这里是你的过渡将是什么样子:

 

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

无需进行transition.excludeTarget(),因为在addTarget() docs说:

设置targetIds约束过渡到只监听,并采取行动,用这些ID查看。具有不同ID的视图或任何ID都将被忽略。

+0

感谢您的好解释。如果视图组具有背景,则仍会将背景添加到过渡。你有什么想法为什么? – santalu

+0

你可以发布一个gif的行为吗? – azizbekian

+0

对不起,我刚刚意识到它按预期工作。但我的实际问题依然存在。我试图在recyclerview上实现回拉动画。我已将viewPager作为回收者查看项目。 viewPager包含一个imageview。我试图做一个幻灯片过渡,如果viewPager位置大于0.但它不知道怎么做幻灯片转换。你可以从[gif](https://media.giphy.com/media/tV1PsEnENNR3G/giphy.gif)看到它。如果你能帮助或给我关于这方面的想法,我会非常感激。否则,我只是会接受你的答案,因为它是。 – santalu