ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Navigation 实现不同fragment之间的view的共享(含动画过渡)

2021-05-29 11:03:34  阅读:233  来源: 互联网

标签:动画 fragment image extras 过渡 onCreate Navigation view


以imageView的共享举例

  1. 两个fragment都要有各自的imageview视图,id可以不同,但transitonName一定要相同, 都要指定相同的src

例如:

fragment A
<ImageView
        android:id="@+id/face_icon_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="face_image"
        android:src="@mipmap/ic_launcher" />

fragment B
<ImageView
        android:id="@+id/face_icon_forget"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:transitionName="face_image"
       android:src="@mipmap/ic_launcher" />

       2:在fragmentA的跳转中设置:

toForget.setOnClickListener {
            //跳转到忘记密码界面
            val extras = FragmentNavigatorExtras(face_icon_login to "face_image")
            findNavController().navigate(R.id.to_fragment_forget, null, null, extras)
        }

extras可以是多个Pair组成, Pair<View, String>, view通过findviewbyid得到,string是transitionName.

这个时候已经实现共享元素过渡了,但要实现动画效果还要加第三步

 

     3:在fragmentB的onCreate中设置:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        sharedElementEnterTransition = TransitionInflater.from(requireContext())
            .inflateTransition(R.transition.shared_image)
    }

相应地,需要在res下有transition的资源文件夹, 里面有一个shared_image文件, 内容为:

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

autoTransition也可以换成其他动画效果。

 

 

最后, 使用共享元素过渡时,不得使用动画框架(上一部分中的 enterAnimexitAnim 等),而只能使用过渡框架来设置进入和退出过渡。即把fragment之间过渡的动画效果去掉。

标签:动画,fragment,image,extras,过渡,onCreate,Navigation,view
来源: https://www.cnblogs.com/--here--gold--you--want/p/14824731.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有