Android:带片段的共享元素转换

时间:2016-11-08 18:08:22

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

我正在开发一个项目,我需要使用共享元素在片段之间进行转换。我已经尝试了几乎所有东西,但转换效果不起作用。

我有一个名为TimelineActivity的活动,我有2个片段,一个动态添加到TimelineActivity的ListFragment和一个DetailFragment。

每当我点击ListFragment中ListView中的一个项目时,片段就会被DetailFragment替换。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    DetailFragment fragment = DetailFragment.newInstance();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        fragment.setSharedElementEnterTransition(new ChangeBounds().setDuration(2000));
        fragment.setEnterTransition(new ChangeBounds().setDuration(2000));
        setExitTransition(new ChangeBounds().setDuration(2000));
        fragment.setSharedElementReturnTransition(new ChangeBounds().setDuration(2000));
    }

    FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

    fragment.setAllowEnterTransitionOverlap(true);
    fragment.setAllowReturnTransitionOverlap(true);

    ft.replace(R.id.timeline_container, fragment);
    ft.addSharedElement(view.findViewById(R.id.transition), "selectClientTransition");
    ft.addToBackStack(null);

    // Start the animated transition.
    ft.commit();
}

在我的listview_row.xml中,这是listview的布局:

   <LinearLayout
   android:id="@+id/transition"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="#FFF"
   android:orientation="vertical"
   android:padding="10dp"
   android:transitionName="selectClientTransition">
   </LinearLayout>

在我的fragment_detail.xml中,我有以下内容:

<LinearLayout
                android:id="@+id/transition"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#FFF"
                android:orientation="vertical"
                android:padding="10dp"
                android:transitionName="selectClientTransition"
                android:weightSum="12">
</LinearLayout>

我将此添加到我的AppTheme

<item name="android:windowContentTransitions">true</item>

为了清楚起见,片段被替换,这样工作正常,但没有改变边界的效果。我真的被困在这里所以欢迎任何事情。

提前致谢

1 个答案:

答案 0 :(得分:0)

我刚刚发现只有在我使用带有多个1元素的自定义arrayadapter时才会发生,如果我切换到我的ListView的普通String数组,一切正常,如果我只有1个元素使用自定义arrayadapter的listview,一切正常。