解决:Android 设置 Activity 透明和页面开闭时闪烁

一、说明

我们有的时候需要添加一个透明的 Activity,在上面做一些操作,但往往会有一些问题,要么不能完全透明,要么打开和关闭时存在短暂的闪烁,会影响用户体验。我在网上搜索了一些答案,亲试很发现大多是存在问题的。最后经过一系列尝试后终于实现用户无感知透明了。

二、解决方案

1、设置 Activity 透明

在 manifest 文件中给指定 Activity 设置如下主题。

XML 复制代码
    <!-- 透明主题 可实现 Activity 完全透明 -->
    <style name="TransTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item> <!-- 背景色透明 -->
        <item name="android:windowIsTranslucent">true</item> <!-- 是否有透明属性 -->
        <item name="android:backgroundDimEnabled">false</item> <!-- 背景是否半透明 -->
        <item name="android:statusBarColor">@android:color/transparent</item> <!-- 状态栏透明 -->
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> <!-- activity窗口切换效果 -->

        <item name="android:windowNoTitle">true</item>
        <item name="android:activityOpenEnterAnimation">@null</item>
        <item name="android:activityOpenExitAnimation">@null</item>
        <item name="android:activityCloseEnterAnimation">@null</item>
        <item name="android:activityCloseExitAnimation">@null</item>
        <item name="android:windowTranslucentStatus">false</item>
    </style>

2、启动和关闭页面时闪烁问题

重写 Activity 的以下 2 个方法。

java 复制代码
    @Override
    public void overridePendingTransition(int enterAnim, int exitAnim) {
        super.overridePendingTransition(0, 0);
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(0, 0);
    }
相关推荐
幻雨様4 小时前
UE5多人MOBA+GAS 45、制作冲刺技能
android·ue5
Jerry说前后端5 小时前
Android 数据可视化开发:从技术选型到性能优化
android·信息可视化·性能优化
Meteors.6 小时前
Android约束布局(ConstraintLayout)常用属性
android
alexhilton7 小时前
玩转Shader之学会如何变形画布
android·kotlin·android jetpack
whysqwhw11 小时前
安卓图片性能优化技巧
android
风往哪边走11 小时前
自定义底部筛选弹框
android
Yyyy48212 小时前
MyCAT基础概念
android
Android轮子哥12 小时前
尝试解决 Android 适配最后一公里
android
雨白13 小时前
OkHttp 源码解析:enqueue 非同步流程与 Dispatcher 调度
android
风往哪边走14 小时前
自定义仿日历组件弹框
android