Android页面切换时从某个view位置慢慢扩散显示全屏

在页面A点击需要跳转时使用下面的代码,view代表开始扩散的View
val options =
            ActivityOptionsCompat.makeSceneTransitionAnimation(
                this,
                view,
                "transition"
            )
        val intent = Intent(this, WiFiActivity::class.java)
        val x = (view.x + view.width / 2).toInt()
        val y = (view.y + view.height / 2).toInt()
        LogUtils.e("测试red", x, y)
        intent.putExtra(
            "x",
            x
        )
        intent.putExtra(
            "y",
            y
        )
        startActivity(intent, options.toBundle())
需要跳转的页面B根布局需要定义id,这里为container,下面的代码在oncreate中使用
if (savedInstanceState == null && intent.hasExtra("x") && intent.hasExtra("y")) {
            binding.container.visibility = View.INVISIBLE
            var x = intent.getIntExtra("x", 0)
            var y = intent.getIntExtra("y", 0)
            LogUtils.e("测试red1", x, y)
            val viewTreeObserver: ViewTreeObserver = binding.container.viewTreeObserver
            if (viewTreeObserver.isAlive) {
                viewTreeObserver.addOnGlobalLayoutListener(object :
                    ViewTreeObserver.OnGlobalLayoutListener {
                    override fun onGlobalLayout() {
                        val circularReveal: Animator = ViewAnimationUtils.createCircularReveal(
                            binding.container, x, y, 0f,
                            (Math.max(
                                binding.container.width,
                                binding.container.height
                            ) * 1.1).toFloat()
                        )
                        circularReveal.duration = 500
                        circularReveal.interpolator = AccelerateInterpolator()
                        binding.container.visibility = View.VISIBLE
                        circularReveal.start()
                        binding.container.viewTreeObserver.removeOnGlobalLayoutListener(this)
                    }
                })
            }
        } else {
            binding.container.visibility = View.VISIBLE
        }

通过上面的代码可以实现从页面A跳转到页面B时,页面B会呈现从view的位置处渐渐向屏幕外扩散展开的一个变化动画

但是这样做会让点击时页面B扩散过程时的背景不是页面B,而是黑色纯底的背景,而我们想实现的代码是让页面A作为背景,页面B从页面A的某个view扩散开,那么还需要做下面的操作
在manifests中的activityB中设置自定义主题风格
主题内容:
<style name="FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowFullscreen">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>//设置透明色
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowTranslucentNavigation">false</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    </style>

使用这个主题设置后就能实现页面A跳转页面B时,页面B的扩散背景是页面A,而不是纯黑,可以理解为纯黑背景被替换成透明色,而页面A仍在页面B下面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值