
依赖 项目级别build.gradle
- buildscript {
- dependencies {
- classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.4.2")
- }
- }

app级别
- implementation 'androidx.navigation:navigation-fragment-ktx:2.5.1'
- implementation 'androidx.navigation:navigation-ui:2.5.1'
- }
顶部添加插件saferargs
- plugins {
- id 'com.android.application'
- id 'org.jetbrains.kotlin.android'
- id 'androidx.navigation.safeargs.kotlin'
- }
mainActivity里面没有代码 布局如此
- <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="match_parent"
- tools:context=".MainActivity">
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.5"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
-
- <androidx.fragment.app.FragmentContainerView
- android:id="@+id/navHostFragment"
- android:name="androidx.navigation.fragment.NavHostFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:defaultNavHost="true"
- app:navGraph="@navigation/nav_graph" />
- FrameLayout>
-
- androidx.constraintlayout.widget.ConstraintLayout>
mav_graph.xml
- <navigation xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/nav_graph"
- app:startDestination="@id/mainFragment">
-
- <fragment
- android:id="@+id/mainFragment"
- android:name="com.example.share_element_anim.MainFragment"
- android:label="MainFragment" >
- <action
- android:id="@+id/action_mainFragment_to_imageFragment"
- app:destination="@id/imageFragment" />
- fragment>
- <fragment
- android:id="@+id/imageFragment"
- android:name="com.example.share_element_anim.ImageFragment"
- android:label="ImageFragment" />
- navigation>
MainFragment
- package com.example.share_element_anim
-
- import android.os.Bundle
- import android.view.LayoutInflater
- import android.view.View
- import android.view.ViewGroup
- import androidx.fragment.app.Fragment
- import androidx.navigation.fragment.FragmentNavigatorExtras
- import androidx.navigation.fragment.findNavController
- import com.example.share_element_anim.databinding.FragmentMainBinding
-
- class MainFragment : Fragment(R.layout.fragment_main) {
- private lateinit var binding: FragmentMainBinding
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- super.onViewCreated(view, savedInstanceState)
- binding = FragmentMainBinding.bind(view)
- binding.ivImage.setOnClickListener {
- val extras = FragmentNavigatorExtras(binding.ivImage to "image_big")
- findNavController().navigate(
- R.id.action_mainFragment_to_imageFragment,
- null,
- null,
- extras
- )
-
- }
- }
-
-
- override fun onDestroy() {
- super.onDestroy()
-
- }
- }
-
布局
- <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="match_parent">
-
- <ImageView
- android:id="@+id/ivImage"
- android:layout_width="120dp"
- android:layout_height="120dp"
- android:transitionName="image_small"
- app:layout_constraintBottom_toBottomOf="parent"
-
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.5"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:srcCompat="@drawable/ic_launcher_background" />
-
- androidx.constraintlayout.widget.ConstraintLayout>
ImageFragment
- package com.example.share_element_anim
-
- import android.os.Bundle
- import android.transition.TransitionInflater
- import androidx.fragment.app.Fragment
-
- class ImageFragment : Fragment(R.layout.fragment_image) {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- val animation = TransitionInflater.from(requireContext()).inflateTransition(
- android.R.transition.move
- )
- sharedElementEnterTransition = animation
- sharedElementReturnTransition = animation
- }
- }
布局
- <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="match_parent">
-
- <ImageView
- android:id="@+id/ivImage"
- android:layout_width="0dp"
- android:layout_height="500dp"
- android:scaleType="centerCrop"
- android:transitionName="image_big"
- app:layout_constraintBottom_toBottomOf="parent"
-
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.5"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:srcCompat="@drawable/ic_launcher_background" />
-
- androidx.constraintlayout.widget.ConstraintLayout>