使用共享元素的Android片段转换

大家!
我有2个片段.在一个片段中,我在卡片中有一个小图像.在2d片段中,我的布局标题中有相同​​的图像.我希望将此图像的共享元素从一个片段转换到另一个片段,如此示例 http://1.bp.blogspot.com/-Vv4SxVSI2DY/VEqQxAf3PWI/AAAAAAAAA7c/mfq7XBrIGgo/s1600/activity_transitions%2B(1).gif中所示

2d片段:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f4f7">
<CustomScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#f2f4f7">
    <LinearLayout
        android:id="@+id/content_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:divider="@drawable/vertical_divider"
        android:showDividers="middle">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:id="@+id/header_wrapper"
                android:layout_width="match_parent"
                android:layout_height="166.7dp">
                <ImageView
                    android:id="@+id/share_image"
                    android:transitionName="imageTransition"
                    android:layout_width="match_parent"
                    android:layout_height="166.7dp"
                    android:src="@drawable/friday"/>

第一片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginTop="56dp"
android:background="#ff1e1e23">
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dp"
    android:src="@drawable/menuicon1g"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dp"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="22sp"/>
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="200dp"
    android:layout_height="300dp"
    android:layout_marginTop="25dp"
    card_view:cardCornerRadius="4dp"
    card_view:cardBackgroundColor="#fff"
    card_view:cardElevation="2dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_horizontal">
        <ImageView
            android:id="@+id/share_image"
            android:transitionName="imageTransition"
            android:layout_width="match_parent"
            android:layout_height="92.5dp"
            android:src="@drawable/friday"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:src="@drawable/demo_calendar"/>
        <com.zagum.work.virtualfitness.CustomTextView
            xmlns:com.zagum.work.virtualfitness="http://schemas.android.com/apk/res/com.zagum.work.virtualfitness"
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_marginTop="10dp"
            com.zagum.work.virtualfitness:typeface="fonts/Roboto-Light.ttf"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="40dp"
            android:gravity="center"
            android:paddingLeft="40dp"
            android:paddingRight="40dp"
            android:textSize="18sp"
            android:textStyle="bold"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

交易:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                View image = mRootView.findViewById(R.id.share_image);

                CurrentWorkoutFragment secondFragment = CurrentWorkoutFragment.newInstance();
                secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.transition_move));

                FragmentTransaction trans = getFragmentManager().beginTransaction();
                trans.replace(R.id.container,secondFragment);
                trans.addToBackStack(null);
                trans.addSharedElement(image,image.getTransitionName());
                trans.commit();
            }

transition_move.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
   <changeImageTransform />
   <changeBounds/>
</transitionSet>

但是没有图像动画发生.它出现在左上角的调整大小.

解决方法

查看 this答案.

Because the view I’m sharing between 2 fragments is a child of another
view (RelativeLayout) in the 2nd fragment,you need to add the
ChangeTransform transition to your TransitionSet.

基本上你需要的是添加一个< changeTransform />在transition_move.xml中

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...