代码之家  ›  专栏  ›  技术社区  ›  Fatih Santalu

从转换中排除ViewGroup,但一个特定子级除外

  •  2
  • Fatih Santalu  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   azizbekian    7 年前

    有什么问题?

    问题来自 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 mTargetIds mTargets 将留空。

    相反,执行 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 :