如何在navigation中的fragment之间使用Android Material中的动画

如果转载,请标明出处:https://blog.csdn.net/long117long/article/details/108295528

 

如何在navigation中的fragment之间使用Android Material中的动画?

     Android Material的依赖是:implementation 'com.google.android.material:material:1.2.0'

    先进行navigation的编写(这里不多说,假定已经完成了),

    然后,在需要在跳转的地方加上:

exitTransition = MaterialElevationScale(true)
reenterTransition = MaterialElevationScale(true)
var extras = FragmentNavigator.Extras.Builder().addSharedElement(requireView(), "my_tran").build()
navController.navigate(R.id.action_A_to_B, null, null, extras)

    需要注意的是,如果只是加上了这几行代码,会出现一个异常:java.lang.IllegalArgumentException: Unique transitionNames are required for all sharedElements

    需要对requireView()添加一个属性值,"my_tran"。

    这个属性值的添加有两种方式:

    一种是代码添加:

        requireView().transitionName = "my_tran"

    另一种是在requireView()对应的布局上添加:

        android:transitionName="my_tran"

    这样运行起来就能看到动效了。

 

扩展:

     假定:当前代码是在Fragment为A,要跳转进入的的Fragment是B。

    代码中的:

         exitTransition,是kotlin的写法,java的写法是:A.this.setExitTransition(new MaterialElevationScale(true))

         reenterTransition 意思同上,java写法:setReenterTransition(...)

    其中:

         MaterialElevationScale 是 Android Material 带一种动画。

         虽然 public void setExitTransition(Object transition)的参数transition是Object,但transition 是需要是 extend  android.transition.Visibility的。

    还有:

        ExitTransition表示 在进入B时,A的动效是什么。

        ReenterTransition表示 从B返回 A时, A的动效是什么。

    另外:

       如果在A中设置  enterTransition,returnTransition ,是看不到效果的。只要在B中(需要在onCreateView时)调用才能看到效果;记得,也要在B中设置transitionName 。

 

参看:

https://material.io/develop/android/theming/motion

https://www.jianshu.com/p/a24a6b96c5cd

https://mp.weixin.qq.com/s?__biz=MzAwODY4OTk2Mg==&mid=2652063934&idx=1&sn=caeaec14e70b7569c06503b1bb04138b&chksm=808ce8fbb7fb61ede45fa93a0d8d5464935f48f28601f2db5d5ea8d60863fe2392f2361cffae&mpshare=1&scene=24&srcid=0827dJXejbBnL86qhxoqK2Mj&sharer_sharetime=1598540918085&sharer_shareid=60c22df4fd578a60aedb59e7f8ed2492&key=0ad5c7253bca314b445be5d5e2a066800996b31198dd56d36d43e8ef5cd37e873d58e3a7a53e3053e7fd7f15a48d8e0fc8b286bf36e5db8770c581f635ef96d528829c94804d1d639d0895bce7fde6acb950290bc4f66350e5f3e16db2ba83932e50df9a60ed9e927bfd173b9c16b6404046e3206a54509caef47163d49e3e9c&ascene=14&uin=MjEyNzg5MDU%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=AcqXQh3MXcmKknsbzaZFpbc%3D&pass_ticket=0lByzHM%2FueGisJU2VhPnKD7zKn7Gw6HdM68ZvUodZoU%3D

 

如果转载,请标明出处:https://blog.csdn.net/long117long/article/details/108295528

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值