Android TV 動態(tài)設置背景的高斯模糊


導語:

用過小米電視的小伙伴都知道,高斯模糊在小米上得到了廣泛的運用,比如小米電視的設置界面.那么什么是高斯模糊,怎么樣做高斯模糊,這篇文章給你揭曉.

什么是高斯模糊

高斯模糊(英語:Gaussian Blur)唱歧,也叫高斯平滑住诸,是在Adobe Photoshop辰狡、GIMP以及Paint.NET等圖像處理軟件中廣泛使用的處理效果肺魁,通常用它來減少圖像噪聲以及降低細節(jié)層次铅搓。

高斯模糊給人的感覺是一層蒙版,這樣的話不會讓背景過于單調.

Android中實現高斯模糊的方式

在Adnroid 中拗慨,現在常用的圖片高斯模糊技術有三種:RenderScript 、fastBlur京景、對RenderScript和fastBlur的優(yōu)化.簡書上有一篇文章介紹了Android對高斯模糊的實現Android 圖片高斯模糊解決方案,這里講的比較詳細,具體原理可以參考這里.

AndroidTv中如何實現背景的高斯模糊.

在文章首的圖片實現了dialog背景的高斯模糊,實現背景的高斯模糊需要以下幾個步驟.

  1. 對背景截圖
   /**
     * 獲取整個窗口的截圖
     *
     * @param context
     * @return
     */
    @SuppressLint("NewApi")
    private static Bitmap captureScreen(Activity context) {
        if (view != null){
            //清空緩沖
            view.destroyDrawingCache();
        }
        view = context.getWindow().getDecorView();

        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bmp = view.getDrawingCache();
        if (bmp == null) {
            return null;
        }

        bmp.setHasAlpha(false);
        bmp.prepareToDraw();

        return bmp;
    }
  1. 對截圖進行高斯模糊化
/**
     * 返回高斯模糊的圖片效果
     *
     * @param context
     * @param bitmap
     * @param radius
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public static Bitmap blur(Context context, Bitmap bitmap, float radius) {
        // 創(chuàng)建輸出圖片
        Bitmap output = Bitmap.createBitmap(bitmap);
        // 構建一個RenderScript對象
        RenderScript rs = RenderScript.create(context);
        // 創(chuàng)建高斯模糊腳本
        ScriptIntrinsicBlur gaussianBlue = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        // 創(chuàng)建用于輸入的腳本類型
        Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
        // 創(chuàng)建用于輸出的腳本類型
        Allocation allOut = Allocation.createFromBitmhttps://github.com/songwenju/CustomTvRecyclerView.ap(rs, output);
        // 設置模糊半徑迈勋,范圍0f<radius<=25f
        gaussianBlue.setRadius(radius);
        // 設置輸入腳本類型
        gaussianBlue.setInput(allIn);
        // 執(zhí)行高斯模糊算法,并將結果填入輸出腳本類型中
        gaussianBlue.forEach(allOut);
        // 將輸出內存編碼為Bitmap醋粟,圖片大小必須注意
        allOut.copyTo(output);
        // 關閉RenderScript對象靡菇,API>=23則使用rs.releaseAllContexts()
        rs.destroy();
        return output;
    }
  1. 將bitmap轉為drawable并設置給view
 /**
     * 獲得背景的高斯模糊圖 drawable
     *
     * @param context
     * @param radius
     * @return
     */
    public static Drawable getBackBlurDrawable(Context context, float radius) {
        return new BitmapDrawable(context.getResources(), getBackBlurBitmap(context, radius));
    }

  View view = findViewById(R.id.layout_dialog);
  view.setBackground(mBackDrawable);

這樣就對圖片做成了高斯模糊.

動態(tài)設置背景

我寫的demo是監(jiān)聽menu鍵去彈出dialog,在處理邏輯的時候發(fā)現截圖不變.原來寫的截圖邏輯是:


/**
    * 獲取整個窗口的截圖
    *
    * @param context
    * @return
    */
   @SuppressLint("NewApi")
   private static Bitmap captureScreen(Activity context) {
     
       View view = context.getWindow().getDecorView();

       view.setDrawingCacheEnabled(true);
       view.buildDrawingCache();
       Bitmap bmp = view.getDrawingCache();
       if (bmp == null) {
           return null;
       }

       bmp.setHasAlpha(false);
       bmp.prepareToDraw();

       return bmp;
   }

后來通過查閱資料發(fā)現這里需要把上一個view銷毀調才可以,添加以下的代碼:

 if (view != null){
            //清空緩沖
            view.destroyDrawingCache();
}

這樣的話就實現了動態(tài)的功能,在多個界面設置高斯模糊.

代碼已經上傳到github上了CustomTvRecyclerView.


這篇文章介紹了為view動態(tài)設置高斯模糊的背景,希望對你有幫助.

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末重归,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子厦凤,更是在濱河造成了極大的恐慌鼻吮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件较鼓,死亡現場離奇詭異椎木,居然都是意外死亡,警方通過查閱死者的電腦和手機博烂,發(fā)現死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門香椎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人禽篱,你說我怎么就攤上這事畜伐。” “怎么了躺率?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵玛界,是天一觀的道長。 經常有香客問我悼吱,道長慎框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任后添,我火速辦了婚禮笨枯,結果婚禮上,老公的妹妹穿的比我還像新娘遇西。我一直安慰自己馅精,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布努溃。 她就那樣靜靜地躺著硫嘶,像睡著了一般阻问。 火紅的嫁衣襯著肌膚如雪梧税。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天称近,我揣著相機與錄音第队,去河邊找鬼。 笑死刨秆,一個胖子當著我的面吹牛凳谦,可吹牛的內容都是我干的。 我是一名探鬼主播衡未,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尸执,長吁一口氣:“原來是場噩夢啊……” “哼家凯!你這毒婦竟也來了?” 一聲冷哼從身側響起如失,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤绊诲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褪贵,有當地人在樹林里發(fā)現了一具尸體掂之,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年脆丁,在試婚紗的時候發(fā)現自己被綠了世舰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡槽卫,死狀恐怖跟压,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情晒夹,我是刑警寧澤裆馒,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站丐怯,受9級特大地震影響喷好,放射性物質發(fā)生泄漏。R本人自食惡果不足惜读跷,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一梗搅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧效览,春花似錦无切、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘦锹,卻和暖如春籍嘹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弯院。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工辱士, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人听绳。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓颂碘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椅挣。 傳聞我的和親對象是個殘疾皇子头岔,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評論 25 707
  • 近年來塔拳,圖片高斯模糊備受設計師的青睞,在各大知名APP中峡竣,如微信蝙斜、手機QQ、網易云音樂等等都有對背景高斯圖模糊的設...
    依然范特稀西閱讀 45,702評論 19 203
  • 內容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 46,756評論 22 665
  • 01 木亦最近十分煩躁澎胡!因為她要離婚的現任老公言午先生又發(fā)短信給她孕荠,懇求木亦小姐再給他一次機會。 “木木攻谁,求你再給...
    晚薇霜閱讀 732評論 0 2
  • 想來那是怎么樣一段糾結熬心的時光稚伍。彼此怎么能夠放下眼前的人,決定去在一起戚宦?那邊胡小姐的前男友在積極備考个曙,最后的一段...
    簡心閣閱讀 143評論 0 0