我的应用程序的工作方式如下:
我希望Product Fragment中的产品名称TextView在添加到列表视图中之后具有与此产品名称TextView的共享元素过渡,以实现令人愉悦的连续性。
到目前为止,我所做的是:
添加时,我会存储productID,以便以后可以检查应使用哪种动画:
ParentActivity.ADDED_TO_DIARY_SHARED_ELEMENT_ID = prodcutID;
((ParentActivity)getActivity()).addToDiarySharedElement(descriptiontext, ParentActivity.ADD_TO_DIARY_SHARED_ELEMENT_TRANSITON_NAME);
然后我在进入列表片段时延迟动画
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.diary_fragment_redesign, container, false);
// Postpone the shared element enter transition.
postponeEnterTransition();
}
然后,当数据加载到适配器时,我试图找到刚刚添加的产品ID
//this product was just added, assign it a shared element transition name
if(ParentActivity.ADDED_TO_DIARY_SHARED_ELEMENT_ID == dbChild.getProductID()){
ViewCompat.setTransitionName(item_description,ParentActivity.ADD_TO_DIARY_SHARED_ELEMENT_TRANSITON_NAME);
sharedElementDrawnInterface.sharedElementDrawn(item_description);
}
然后触发回调以恢复动画
private void scheduleStartPostponedTransition(final View sharedElement, ExpandableListView listview) {
if(listview!=null && sharedElement!=null) {
listview.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
sharedElement.getViewTreeObserver().removeOnPreDrawListener(this);
startPostponedEnterTransition();
return true;
}
});
}
}
但是动画不会发生
关于在Internet上共享元素转换来创建新视图的任何信息,我都找不到,只有动画两侧的两个现有视图
有什么想法吗?
致谢