从转换中排除 ViewGroup,除了一个特定 child
Exclude ViewGroup from transition except one specific child
我正在尝试从共享元素 return 转换中排除一个视图组,比方说回收器视图。但问题是我不希望所有 children 的回收者视图都被排除在外,我希望特定的回收者视图 child 包含转换。
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
我不明白为什么上面的代码不起作用。如果您有任何想法或任何方法来实现这一目标,请告诉我?
有什么问题吗?
问题来自 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所述:
Setting targetIds constrains the Transition to only listen for, and act on, views with these IDs. Views with different IDs, or no IDs whatsoever, will be ignored.
我正在尝试从共享元素 return 转换中排除一个视图组,比方说回收器视图。但问题是我不希望所有 children 的回收者视图都被排除在外,我希望特定的回收者视图 child 包含转换。
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
我不明白为什么上面的代码不起作用。如果您有任何想法或任何方法来实现这一目标,请告诉我?
有什么问题吗?
问题来自 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所述:
Setting targetIds constrains the Transition to only listen for, and act on, views with these IDs. Views with different IDs, or no IDs whatsoever, will be ignored.