只有 android.R.transition.move 不工作

only android.R.transition.move not working

我试图将共享元素转换添加到我的片段中,但是 move 转换不起作用

val transition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)

如果我将 android.R.transition.move 更改为 android.R.transition.explodeandroid.R.transition.slide_left 动画将起作用,但不是需要的那些

我使用导航库

第一个片段代码:

class TimersListFragment : Fragment() {
    private lateinit var binding: FragmentTimersListBinding
    private lateinit var viewModel: TimerListViewModel

    private lateinit var setListAdapter: SetListAdapter

    override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View {
        binding = FragmentTimersListBinding.inflate(inflater)
        viewModel = ViewModelProvider(this).get(TimerListViewModel::class.java)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        super.onStart()

        setListAdapter = SetListAdapter()

        setListAdapter.onItemClicked = { set, name, time ->
                val extras = FragmentNavigatorExtras(name to "setName", time to "setTime")
                val action = TimersListFragmentDirections.previewSet(set.setInfo.setId)
                findNavController().navigate(action,extras)
        }
        binding.listSets.layoutManager = LinearLayoutManager(context)
        binding.listSets.adapter = setListAdapter
    }
}

recyclerView 项目布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:id="@+id/card_set_info"

        style="@style/CardView.rounded"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:clickable="true"
        android:focusable="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:id="@+id/item_card_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="?android:attr/selectableItemBackground">

                <TextView
                    android:id="@+id/text_set_name"
                    android:transitionName="setName"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="16dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="16dp"
                    android:textAppearance="@style/TextAppearance.AppCompat.Headline"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    tools:text="set name" />

                <TextView
                    android:id="@+id/text_approximate_time"
                    android:transitionName="setTime"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    android:layout_marginBottom="16dp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="@+id/text_set_name"
                    app:layout_constraintTop_toBottomOf="@+id/text_set_name"
                    tools:text="TextView" />
            </androidx.constraintlayout.widget.ConstraintLayout>
        </LinearLayout>

    </androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

第二个片段代码:

class SetPreviewFragment : Fragment() {

    private lateinit var binding: FragmentSetPreviewBinding
    private lateinit var viewmodel: SetPreviewViewModel
    private val args: SetPreviewFragmentArgs by navArgs()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        viewmodel = ViewModelProvider(this).get(SetPreviewViewModel::class.java)
        viewmodel.setup(args.setId)
        binding = FragmentSetPreviewBinding.inflate(inflater)
        return binding.root
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val transition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
        sharedElementEnterTransition = transition
        sharedElementReturnTransition = transition
    }
}

第二个片段布局:

<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/motion_layout_preview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/fragment_set_preview_scene"
    tools:context=".screens.SetPreviewFragment">


    <androidx.appcompat.widget.Toolbar
        android:id="@+id/preview_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:title="@string/set_preview"
        app:titleTextColor="?attr/colorOnPrimary" />

    <TextView
        android:id="@+id/text_set_name_title"
        android:transitionName="setName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:elevation="2dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/preview_toolbar"
        tools:text="set name" />

    <androidx.cardview.widget.CardView
        android:id="@+id/cardView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"

        android:layout_marginBottom="8dp"
        app:cardCornerRadius="25dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_p_start">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_p_action_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:listitem="@layout/item_preview_action" />
    </androidx.cardview.widget.CardView>

    <Button
        android:id="@+id/btn_p_start"
        style="@style/RoundedButton50dp"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="start|center_vertical"
        android:paddingHorizontal="16dp"
        android:text="@string/start"
        app:layout_constraintEnd_toStartOf="@+id/btn_p_edit"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_set_name_title" />

    <TextView
        android:id="@+id/text_time_on_button"
        android:transitionName="setTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:elevation="2dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Button"
        android:textColor="?attr/colorOnPrimary"
        android:translationZ="2dp"
        app:layout_constraintBottom_toBottomOf="@+id/btn_p_start"
        app:layout_constraintEnd_toEndOf="@+id/btn_p_start"
        app:layout_constraintTop_toTopOf="@+id/btn_p_start"
        tools:text="00:00" />

    <ImageButton
        android:id="@+id/btn_p_edit"
        style="@style/RoundedButton50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:backgroundTint="?attr/colorPrimary"
        android:minWidth="50dp"
        android:minHeight="50dp"
        android:paddingHorizontal="12dp"
        android:src="@drawable/ic_edit"
        android:tint="?attr/colorOnPrimary"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_set_name_title" />

</androidx.constraintlayout.motion.widget.MotionLayout>

我遇到了同样的情况,试图从 RecyclerView 执行共享元素转换,并通过代码设置唯一的 transitionName 使其工作。

我使用的唯一 transitionName 是元素的内容。 或许你可以直接用时间的名字and/or试试。