在页面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下面