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测试一下,并没有泄露现象
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)