Android 狀態列背景模糊透明效果實現

2021-07-06 01:22:48 字數 1961 閱讀 4680

1.整體思路:

更換桌布時,獲取當前桌面桌布(已適應螢幕後的桌布),裁剪當前桌布適應statusbar,

將其設定為statusbar

背景,再採用高斯模糊處理演算法,實現模糊效果。關於透明度,可以通過設定

background

實現。

2.實現:

首先調整桌布鋪滿螢幕,當前桌布未充滿螢幕。修改offset

值為0,

桌布視窗繪製出現

y軸偏移,導致螢幕未能鋪滿。

再來看背景處理,分為兩種情況,乙個是靜態桌布,乙個是動態桌布。先來看靜態桌布,當tabletstatusbar

收到替換桌布

intent

時,分別有以下四個過程:

1) mbackground = mwall*****manager.getbitmap();

獲取當前桌面處理後的桌布。

2)根據螢幕大小,以及

statusbar

長寬,裁剪當前桌面桌布

bitmap result = bitmap.createbitmap(mbackground, clipx, clipy, clipw, cliph, null, false);

3)利用高斯模糊演算法,處理裁剪後桌布為模糊狀態,並可調整實際模糊度。

關於高斯模糊演算法可參考:

drawable drawable = boxblurfilter(result);

/** 水平方向模糊度 */

private static float hradius = 10;

/** 豎直方向模糊度 */

private static float vradius = 10;

/** 模糊迭代度 */

private static int iterations = 7;

4)設定背景

mstatusbarview.setbackgrounddrawable(drawable);

靜態桌布先告一段落,來看動態桌布,對於動態桌布,我們的方案是盡量尋找一張靜態來替代。

動態桌布的設定時,與靜態桌布設定不同,首先會setwall*****component

,所以在每次更換動態桌布時,傳送廣播,來到

code 2

,當tabletstatusbar 

收到為動態桌布時,則設定背景為靜態。

以上是桌布替換動作時,相關處理邏輯。繼續來看,使用者開機後,statusbar

初始化時,設定背景。

在tabletstatusbar  makestatusbarview()

方法中,傳送

msg_set_wz_statusbar_blur

訊息,handler

收到並處理:

關鍵方法是mwall*****manager.getwall*****info() != null 

來判斷當前桌布是否為動態桌布或為靜態桌布,判斷後按

code2

相同邏輯,處理之,並最終實現

statusbar 

背景模糊效果。

最後,還有一點是,透明背景效果的實現,在此用了乙個取巧的方法:

code 5:

frameworks/base/packages/systemui/res/layout/system_bar.xml

android:id="@+id/bar_contents"

android:layout_width="match_parent"

android:layout_height="match_parent"

-            android:clipchildren="false" >

+            android:clipchildren="false"

+            android:background="#30000000" >

到此為止,statusbar 

背景模糊透明效果基本實現。

android改變狀態列背景為應用背景

activity main.xml 中的root 布局中新增 android cliptopadding false android fitssystemwindows false 在介面activity的oncreat函式中新增 if build.version.sdk int build.ver...

android 透明狀態列(設定純色背景)

使用透明狀態列必須在 4.4 api19 以上,在5.0 api21 做了優化,所以需要不同適配。設定透明狀態列,採取的是使用較多的方法,設定不同style 建立 values v19 style.xml color colorprimary color color 2da568 color col...

Android透明狀態列 沉浸式狀態列

注意 android版本 4.4此方法有效 第一步 在activity的布局檔案中,根布局中加入以下第5 7行 第二步 新建類kitkatutils.class package cn.powerthink.djt.utils import android.annotation.suppresslin...