san*_*alu 2 animation android android-animation android-transitions shared-element-transition
我试图从共享元素返回转换中排除一个视图组,比如说回收器视图。但问题是我不希望回收器视图的所有子级都排除在外,我希望特定的回收器视图子级包含转换。
Slide transition = new Slide(Gravity.END);
transition.excludeTarget(recyclerView, true);
transition.addTarget(ImageView.class);
setExitTransition(transition);
setReturnTransition(transition);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么上面的代码不起作用。如果您有任何想法或任何方法来实现这一目标,请告诉我?
有什么问题?
问题来自于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);
}
...
}
第一条语句没有通过,因此该elsecase 被执行,这使得你的语句addTarget(ImageView.class)被忽略。
为什么第一个语句没有通过?
因为addTarget(Class) 会改变 mTargetTypes字段,因此mTargetIds和mTargets都会留空。
相反,执行addTarget(int),这将会改变 mTargetIds。
因此,您的转换将如下所示:
Slide transition = new Slide(Gravity.END);
transition.addTarget(R.id.some_imageview);
setExitTransition(transition);
setReturnTransition(transition);
无需执行transition.excludeTarget(),因为如addTarget()文档中所述:
设置 targetIds 会限制 Transition 仅侦听具有这些 ID 的视图并对其执行操作。具有不同 ID 或没有任何 ID 的视图将被忽略。
| 归档时间: |
|
| 查看次数: |
2321 次 |
| 最近记录: |