【Android】RecycleView共享元素动画Shared Element点击的偏移解析(安卓低版本不存在该问题)

一:阅读资料

  1. Shared Element(共享元素)的使用
  2. 官方 共享元素git与使用pair的模板写法
  3. pair保存的是一对key value,而map可以保存多对key value。map中可以将pair加进去。所以普通intent传递pair即可。

二:Bug场景

  1. 在项目中使用共享元素动画,在点击之后在开始动画/结束动画时会存在一个偏移量,我这边是下移,并且删除得只剩一个imageview,改变RecycleView的layoutManager模式仍然不生效。
  2. 堆栈异常上也有人遇见这个问题 不过他还没解决

三:用我的塑料英语回答了一下

  1. 尝试了迁移发现,正常的ok,移到项目里就不中了。简单的来说就是主题文件里的全屏被开了,估计考虑到上面的状态栏有一定的高度站位偏移。
    在这里插入图片描述

四:兼容全屏的解决方案

1. 在跳转后的活动中监听共享元素动画,设置非全屏,但仍有缺陷,切换动画正常,但在切换的一瞬间/大概1,2s会出现顶部通知栏。

        window.sharedElementEnterTransition.addListener(object : Transition.TransitionListener {
            override fun onTransitionStart(transition: Transition?) {
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }

            override fun onTransitionEnd(transition: Transition?) {
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }

            override fun onTransitionCancel(transition: Transition?) {}
            override fun onTransitionPause(transition: Transition?) {}
            override fun onTransitionResume(transition: Transition?) {}
        })

五:其他资料

1、 做共享元素动画时,当View大小不一致时,只需在二级页面指定 (推荐两个都写).override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL),该属性为glide下的方法与Target(原图的长和宽),区别在于如果不加存储bitmap按照调整后的view存储,加了按原图存储。

  1. Glide-缩略图,其一是加载另外的路径为缩略图,其二是设定一个浮点指进行缩略

2、共享元素相关

  1. 普通使用与延时加载
  2. 共享元素Demo Recycleview共享过渡处理Shared Element Transitions
  3. 使用官方推荐的Pair方式
        val activityOptions = activity?.let {
                ActivityOptionsCompat.makeSceneTransitionAnimation(
                    it,
                    Pair<View, String>(view, 元素唯一标志名)
                )
            }
  1. 共享元素监听,监听非常重要addlistener一定要移除对应的,不然每次都add一个,非常危险!
  2. 共享元素实现大图浏览,即recycleView到ViewPager共享动画setExitSharedElementCallback(及整合高仿微信大图查看,拖拽退出)
    1)若在fragent中要调用activity不然无效,且会有android和androidx参数的操作。核心在于清空原本的标志名,建立新标志名。
    在这里插入图片描述
  3. CardView上具有半径的共享元素过渡
  4. setExitSharedElementCallback
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值