最近研究了一下,使用Compose如何去做类似ios的全屏侧滑返回效果,下面展示成果:
总共需要几个功能进行搭配使用:
1.Accompaint的Pager模块
2.通过反射使当前窗口透明以及不透明
思路分析:
pager类似于android原生的viewpager,通过初始化两个page,默认定位到Index=1的page,index=0的page将其设置为带透明背景的page,在滑动到page=0的时候,将窗口设置为透明,则实现了滑动返回效果(滑动过程中,可以看到下方页面)
至于为何使用反射来实现动态的透明窗口,而不是使用在style中设置透明背景,很多博客都有所解释,有的是说会对动画效果产生影响,有的说会导致下层activity生命周期混乱,以及加大内存开销等等,博主并没有对这些东西进行求证,有兴趣的可以自行求证,那也在这里贴一下style实现透明窗口的方式(本文并未采用这种方式):
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
下方贴代码讲述最终实现:
首先是反射将窗口设置透明的代码:
object SlideBackUtil {
//当前是否是透明
var isTrans = false
/**
* 反射将窗口转为透明
*/
fun convertToTranslucent(activity: Activity) {
if (activity.isTaskRoot|| isTrans) return
try {
getTranslucentConversionListenerClass()?.let { listenerClass ->
val listener = getTranslucentConversionListener(listenerClass)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val activityOption =
Activity::class.java.getDeclaredMethod("getActivityOptions")
activityOption.isAccessible = true

该博客分享了如何在Android中使用Jetpack Compose模仿iOS的全屏侧滑返回效果。主要通过组合使用Accompaint的Pager模块和反射技术,动态改变窗口透明度。在滑动到第一页时,利用反射将窗口设为透明,实现滑动返回的效果。同时,文中提供了使用HorizontalPager和Swipeable两种不同实现方式的代码示例,并强调了在特定情况下可能存在的滑动冲突问题。最后,博主提醒读者关闭activity的finish动画以完善体验。
最低0.47元/天 解锁文章
1561

被折叠的 条评论
为什么被折叠?



