SmartSwipe icon indicating copy to clipboard operation
SmartSwipe copied to clipboard

Activity相关的侧滑,第一次滑动不够灵敏

Open beiger opened this issue 5 years ago • 9 comments

在Activity中使用ActivitySlidingBackConsumer时,第一次侧滑返回,手指滑动了半个屏幕,Activity才刚开始向右滑动。如果停留在这个页面,再进行第二次、第三次滑动的话,就比较灵敏了。请问这个有什么解决办法吗?

beiger avatar Aug 01 '19 08:08 beiger

嗯,虽然不明显,但确实有这个问题,这个问题的原因是:由于第一次执行activity透明方法activity.convertToTranslucent需要100毫秒左右,为了不显示黑屏和产生一次瞬移,需要等到执行activity透明完毕后才开始移动的,如果快速滑动后按住不动,确实会存在手指与当前activity显示的边缘距离较远的问题。

我来想办法看看能不能继续优化。

luckybilly avatar Aug 01 '19 08:08 luckybilly

另外,侧滑返回不推荐直接在activity中用使用xxxComsumer来做,推荐使用SmartSwipeBack

  1. 如果activity在不同app中复用,侧滑返回的实现需求不同时,需要额外处理
  2. 侧滑返回的透明方案,需要兼容5.0以下的版本
  3. 需要侵入baseActivity
  4. 第三方SDK中的activity将没有侧滑返回效果

luckybilly avatar Aug 01 '19 08:08 luckybilly

嗯嗯,谢谢大佬

beiger avatar Aug 01 '19 08:08 beiger

我自己把activity设置为透明的,然后不调用这个方法可以吗

beiger avatar Aug 01 '19 09:08 beiger

@beiger 通过主题将activity设置为透明有很多坑,慎用

luckybilly avatar Aug 01 '19 10:08 luckybilly

这样子可以吗,空闲的时候后先透明化 image

beiger avatar Aug 01 '19 10:08 beiger

我也正在尝试这种方式,但有个问题:打开activity后立即快速侧滑,只要速度够快(在入场动画播放完成之前侧滑),能看到前一个activity的退出动画,并且2个activity之间的部分是黑色的。继续想办法吧。

luckybilly avatar Aug 01 '19 10:08 luckybilly

打开SwipeBackTranslucentConsumerActivity之后,侧滑一下但不退出,在它基础上再打开这个Activity,再侧滑不退出,多打开几个之后,页面会越来越卡。打开GPU呈现模式分析会发现,条形图很高,每帧的绘制都要好久。convertActivityToTranslucent()这个方法的耗时也越来越久。

beiger avatar Aug 09 '19 08:08 beiger

打开SwipeBackTranslucentConsumerActivity之后,侧滑一下但不退出,在它基础上再打开这个Activity,再侧滑不退出,多打开几个之后,页面会越来越卡。打开GPU呈现模式分析会发现,条形图很高,每帧的绘制都要好久。convertActivityToTranslucent()这个方法的耗时也越来越久。

@beiger v1.0.6修复了这个问题。 问题原因:将activity转为透明后前一个activity被激活(生命周期方法onStart被调用)。 修复方式:在consumer的onClosed方法中奖activity转为不透明

回到当前issue的主题:如果提前将activity转为透明,存在的问题是, 通过idleHandler调用activity.convertToTranslucent方法将activity转为透明,TranslucentConversionListener被回调时间不太可控(实测可能十几毫秒就回调,也可能超过2秒才回调),暂时未有比较妥善的处理方式。

欢迎大佬们提PR优化这个问题!

luckybilly avatar Aug 12 '19 03:08 luckybilly