透明Activity实现 动画 以及 透明主题下onClick事件穿透到底层Activity的解决方法

2017/10/31 天气晴 温度适宜敲代码。

在做项目的时候,需要针对平板用户,将个别页面修改成弹窗样式,就是四周空间留半透明,中间显示内容。

但我全都用activity写好了啊,难道要一个个改成Dailog?肯定不可能,所以就想着在主题上下手脚。

注意:透明主题的Activity的Onclick事件会穿透到底层的Activty,所以1、需要给可用部分的View设置setOnclickListener监听器,2、如果不行就直接接设置onTouchListener,然后返回true。

这个很容易实现,网上一搜,一大堆,就是在AndroidManifest.xml里面,为需要修改的activity增加theme标签,标签内容引用style里的主题。

透明主题style是:

这里需要注意几个问题:

1、必须要parent="AppTheme",因为不用这个的话,有很多属性就都会没有,Activity也不支持,导致报错。

2、android:windowAnimationStyle里面的动画可以自己自定义,但自定义的属性必须继承@android:style/Animation.Translucent

自定义动画不起作用?请参照如下配置


说明一下:

1、必须要parent="@android:style/Animation.Translucent",网上看一人说的,说起来或者不用也行,你们试试。

2、上面两个@null,是因为Animation.Translucent里面的android:windowEnterAnimation和android:windowExitAnimation会与下面的4个动画冲突,会导致Activity有被打开两次,退出两次的现象。

3、如果是弹窗,下面的openExit和closeEnter可以设置为@anim/null。

这样设置之后,你可能会发现,退出动画依然无效,请参照以下方法:

重写finish()方法,增加以下代码

overridePendingTransition(R.anim.app_windows_anim_enter,R.anim.app_windows_anim_exit);

好了,到这个时候,动画应该是可以正常显示了。

但有时候我们需要的效果并不是整一个弹窗一起动,而是大的透明背景渐变出现,中间的内容却需要以一种放大显示,缩小消失的方式来作为动画,这个时候单单设置activity的属性是无法达到这个需求的 。请看。

1、先将Activity的动画换成渐变出现,渐变消失。

2、给中间所有的View包括起来,然后显示的时候给这个大View单独增加动画。

onCreate():

Animation animation=AnimationUtils.loadAnimation(context,R.anim.app_windows_content_anim_enter);

ll_index.setAnimation(animation);

ll_index.startAnimation(animation);

3、消失的时候,需要重写finish(),

Animation animation=AnimationUtils.loadAnimation(context,R.anim.app_windows_content_anim_exit);

ll_index.setAnimation(animation);

ll_index.startAnimation(animation);

animation.setAnimationListener(newAnimation.AnimationListener() {

@Override

public voidonAnimationStart(Animationanimation) {

}

@Override

public voidonAnimationEnd(Animationanimation) {

SubscribeActivity.super.finish();

overridePendingTransition(R.anim.app_windows_anim_enter,R.anim.app_windows_anim_exit);

}

@Override

public voidonAnimationRepeat(Animationanimation) {

}

});

然后送上检测是否是平板的代码。

if((context.getResources().getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) >=Configuration.SCREENLAYOUT_SIZE_LARGE)

基本没有问题了。谢谢。

你可能感兴趣的:(透明Activity实现 动画 以及 透明主题下onClick事件穿透到底层Activity的解决方法)