将子项添加到具有共享元素过渡的listview

时间:2019-10-04 09:40:19

标签: java android android-fragments shared-element-transition

我的应用程序的工作方式如下:

  1. 日记片段(ListView)-加载了服务器中的产品列表
  2. 产品片段-将产品添加到日记中(发布到服务器并打开并刷新日记)

我希望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上共享元素转换来创建新视图的任何信息,我都找不到,只有动画两侧的两个现有视图

有什么想法吗?

致谢

0 个答案:

没有答案