Dialog 出现消失动画和位置

Dialog 出现消失动画和位置,第1张

拿到Dialog的实例, dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation完成动画的设置。

style

缩放+透明度

@anim/grow_in

@anim/grow_out

从上到下

IN

OUT

从左到右

in

out

显示位置有 Window window = dialog.getWindow()window.setGravity(Gravity.BOTTOM|Gravity.LEFT)

下左,,和Framelayout是一样的定位方式。

dialog有两个回调函数, setOnShowListener 和 setOnDismissListener ,可以通过这两个函数还显示和消失的时候,对dialog中的view,进行动画。更富有动感。

2018-10-18日,碰到一个很诡异的事情。自定义dialog从Activity底部的出场动画是系统布置的动画,而自己设置的出场动画根本不起作用,但是退场动画又有作用,花了两个小时,最后发现style里面的一句话导致了这个鬼

<item name="android:windowIsFloating">false</item>

设置为false之后,底部d窗将不会和软键盘发生共存的问题,但是出场动画就会变成系统动画

设置为true之后,底部d窗将会遮盖掉软键盘(软键盘仍然还在),出场动画就会变成自定义动画

dialog的windowAnimation肯定不会陌生,大家都习惯了这么使用

actionsheet_dialog_in.xml

actionsheet_dialog_out.xml

但是这样有个问题,每次页面退到后台和返回前台的时候,dialog的动画都会再执行一次这是因为dialog是通过 PhoneWindow 创建的,每次页面 显示/隐藏 都会触发我们事先设置好的 windowAnimation 动画

如果duration设置的非常短,看起来不太明显. 假设在开发者模式里把动画时长设置*10,就能明显看到页面退出后,dialog的window动画还在执行,例如

调用 removeViewLocked 方法

可以看到, dispatchDetachedFromWindow 做了资源释放的 *** 作

到这里我们不难发现,context是属于ActivityThread的成员变量, 并不是持有的dialog所在页面的context现象,因此 丑归丑,泄露是没有的

用profier测试一下,并没有泄露现象


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11090937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存