IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> navigation中共享元素过渡,并传递参数 -> 正文阅读

[移动开发]navigation中共享元素过渡,并传递参数

到 Fragment 目的地的共享元素过渡

在两个目的地之前共享某个视图时,可以使用共享元素过渡来定义一个目的地导航到另一个目的地时该视图如何过渡。如何使用共享元素过渡,首先要为每个共享元素视图分配一个唯一的过渡名称transitionName,login_fragment中共享元素如下,过渡名为avatar

<ImageView
        android:id="@+id/ivAvatar"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:transitionName="avatar"
        android:src="@mipmap/ic_launcher"/>

register_fragment中为共享元素添加相同的过渡名称

<ImageView
        android:id="@+id/ivAvatar"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:transitionName="avatar"
        android:src="@mipmap/ic_launcher"/>

借助?FragmentNavigator.Extras?类,您可以按过渡名称将共享元素从一个目的地映射到另一个目的地,这与使用?FragmentTransaction.addSharedElement()?类似。您随后可以将 extra 传递给?navigate(),LoginFragment中代码如以下示例所示:

 binding.btnRegister.setOnClickListener {
            //跳转到注册页面
            //avatar为布局文件中设置的transitionName
            val imagePair = Pair<View,String>(binding.ivAvatar,"avatar")
          //  val extras = FragmentNavigatorExtras(binding.ivAvatar to "avatar")
            //如共享元素不只一个,可以传入多个,用逗号隔开
            val extras = FragmentNavigatorExtras(imagePair)
            findNavController().navigate(R.id.action_loginFragment_to_registerFragment,
            null,
            null,
            extras)
        }

接着到目的地RegisterFragment中设置过渡效果:

sharedElementEnterTransition = TransitionInflater.from(requireContext())
            .inflateTransition(R.transition.shared_image)

?该shared_image过渡的定义如下:

<!-- res/transition/shared_image.xml -->
<transitionSet>
    <autoTransition />
</transitionSet>

以上就完成了到fragment目的地的共享元素过渡效果,接下来接续看看如何到activity目的地的共享元素过渡吧。

到 Activity 目的地的共享元素过渡?

Activity 依靠?ActivityOptionsCompat?来控制共享元素过渡(启动包含共享元素的 Activity?文档对此进行了详细介绍),LoginFragment中添加以下代码就可以实现到activity共享元素的过渡了。(别忘了同样要为activity的布局中为共享元素设置transitionName哦)

binding.btnAgree.setOnClickListener {
            //跳转到用户协议activity
            val imagePair = androidx.core.util.Pair<View,String>(binding.ivAvatar,"avatar")
            val options = ActivityOptionsCompat.makeSceneTransitionAnimation(requireActivity(),
                imagePair)
            val extras = ActivityNavigatorExtras(options)
            findNavController().navigate(R.id.action_loginFragment_to_agreementActivity
            ,null,null,extras)
        }

下面来看看效果吧?

使用 Bundle 对象在目的地之间传递参数?

使用?Bundle?对象在目的地之间传递参数。创建?Bundle?对象并使用?navigate()?将它传递给目的地,如下所示:

 val bundle = bundleOf("name" to binding.etName.text.toString())
 findNavController().navigate(R.id.action_loginFragment_to_registerFragment,
        bundle,
        null,
        extras)

传入目的地如果是fragment,使用getArguments()?方法来获得Bundle数据?,如果是activity用getIntent()方法来获得数据。

?

如果想进一步学习可以到Google官方文档上了解更多内容:

在目的地之间添加动画过渡效果 ?|? Android 开发者 ?|? Android Developers

Navigate between fragments using animations ?|? Android Developers

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:17:43  更:2021-09-18 10:20:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:34:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码