除了一个特定子项外,从转换中排除ViewGroup

时间:2017-08-11 09:06:49

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

我正在尝试排除一个视图组,让我们说来自共享元素返回转换的recycleler视图。但事情是我不希望所有回收者视图的孩子排除我想要特定的回收者视图子包括过渡。

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

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

1 个答案:

答案 0 :(得分: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的视图将被忽略。