1. 程式人生 > >Android Activity 實時模糊效果

Android Activity 實時模糊效果

效果圖如下:


程式碼如下:

public class BlurWindow {
    private Window mWindow;
    private WindowManager mWindowManager;
    private View mEmptyView;
    public static final int START_BLUR = 0;
    public static final int STOP_BLUR = 1;
    private static final int EMPTY_SIZE = 0;
    private Handler mHandler = new Handler() {
        private boolean isAdd = false;

        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case START_BLUR:
                if (!isAdd) {
                    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                    lp.flags |= (LayoutParams.FLAG_BLUR_BEHIND | LayoutParams.FLAG_NOT_FOCUSABLE);
                    lp.format = PixelFormat.TRANSPARENT;
                    lp.width = EMPTY_SIZE;
                    lp.height = EMPTY_SIZE;
                    lp.type = LayoutParams.TYPE_APPLICATION;
                    mWindowManager.addView(mEmptyView, lp);
                    isAdd = true;
                }

                break;
            case STOP_BLUR:
                mWindowManager.removeView(mEmptyView);
                isAdd = false;
                break;
            default:
                break;
            }

        };
    };

    public BlurWindow(Activity activity) {
        mWindow = activity.getWindow();
        mWindowManager = mWindow.getWindowManager();
        mEmptyView = new View(activity);
    }

    public void startBlur() {
        mHandler.sendEmptyMessage(START_BLUR);

    }

    public void stopBLur() {
        mHandler.sendEmptyMessage(STOP_BLUR);

    }

}
//sleep 1.5s 然後模糊 再sleep2.0s 再去除模糊
public class BlurWindowActivity extends Activity {
    /** Called when the activity is first created. */
    BlurWindow window;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        window = new BlurWindow(this);
        //startActivity(new Intent("com.test"));
        new Thread() {

            public void run() {
                try {
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                window.startBlur();
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                window.stopBLur();

            };
        }.start();

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

    }
} 

 由於在activity中設定FLAG_BLUR_BEHIND無法立即生效,所以採用了addView這種方式促使它生效。FLAG_NOT_FOCUSABLE這個flag非常關鍵,如果不設定,將導致新加入的view獲取了焦點,但無法控制包括返回按鈕都不能用,需要你重新對window設定callback,參見Dialog的原始碼。

             lp.width = EMPTY_SIZE;
                    lp.height = EMPTY_SIZE;

    高度和寬度如果不設定為0,那就設定一下它的alpha為0或者fomat為TRANSPARENT,否則將會導致新加入的空的view充滿全螢幕而且是黑的。

另外,需要注意的是,這個控制是和某個activity的window強相關的,所以只能用於某個actvity。

如果有更好的方法或者能對以上程式碼進行優化,歡迎大家共享出來。

如果這個程式碼是在activity生命週期中執行而不是延緩執行,比如在onCreate中進acitivty時會黑一下,不知道這個是怎麼回事。

相關推薦

Android Activity 實時模糊效果

效果圖如下: 程式碼如下: public class BlurWindow { private Window mWindow; private WindowManager mWindowManager; private View mEmptyView

Xamarin.android Activity動畫切換效果實現

omx over tails detail ons too ide xamarin Coding http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources——values下新建sty

Android 高斯模糊效果從319ms到3ms的優化實現

之前做過高斯模糊的的效果,不過依賴一個三方庫,今天看到了一篇文章,一個類檔案就能解決,感覺竊喜,分享給大家。 使用: Glide.with(getActivity()).load(mUser.avatarUrl).asBitmap().into(ne

Android 卡片邊框模糊陰影效果實現

1. 使用<shape>標籤實現 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

Android使用RenderScript實現圖片的高斯模糊效果

Android使用RenderScript實現圖片的高斯模糊效果 首先來看一下什麼是高斯模糊效果呢? 高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它

AndroidActivity實時重新整理

簡介 這幾天在寫Android,想要對當前的Activity進行資料的實時重新整理更新,可以使用多執行緒實現 上程式碼 public class MainActivity extends AppCompatActivity { private boolean run =

Android中幾個Activity實現平移效果

問題描述:現假設有4個activity,每個actvity介面的底部都有兩個按鈕,一個是回到前一頁,一個是到下一頁。頁面跳轉的邏輯相對比較簡單,下面來談一下如何給這4個Activity加上平移效果。 問題分析: 步驟:        1.在應用程式——>res目錄下新

Android也能流暢實現毛玻璃效果(高斯模糊)效果

前言 上圖就是我們在IOS裝置上經常能夠見到的毛玻璃(高斯模糊)效果。不得不說,這種效果在適合的場景下使用,能夠獲得絕佳的美感。但是鑑於Android裝置效能和相容性問題,我們通常很難在Android裝置上見到這種效果。 但這並不是IOS的專利效果,Android

Android】邊框旁的文字實現模糊效果

【問題】 如何實現幾行文字的最上面1行和最下面1行的文字為漸變模糊的效果; 【效果圖】 【思路】 簡單來說:用一個漸變的透明的View來覆蓋兩邊的文字區域;具體來說:(這裡只考慮[區域2])最

Android中為網路圖片設定高斯模糊效果

寫一個方法,用來對Bitmap進行高斯模糊: public static Bitmap blurBitmap(Bitmap bitmap ,Context context){ //Let

Android 下實現高效的模糊效果

作者 | Dajavu 地址 | http://www.jianshu.com/p/4abce9d7b347 宣告 | 本文是 Dajavu 原創,已獲授權釋出,未經原作者允許請勿轉載 前言 其實有關 android 下實現圖片模糊的文章有很多,大多都是使用

Android——圖片設定為高斯模糊效果(ImageView)

效果圖://模糊 Resources res = ShowActivity.this.getResources(); //拿到初始圖 Bitmap bmp= BitmapFactory.decodeRe

android 製作ios毛玻璃效果(圖片模糊處理)

先不說廢話直接上效果圖 毛玻璃效果在ios裡是非常常見的,但是在android上卻很少見,這是為什麼呢? ios系統本身就應用了非常多的毛玻璃效果,系統對這種效果有相對比較好的處理,但是android系統並沒有類似的api,直到現在的SDK22也沒有

Android快速實現動態模糊效果

寫在前面現在,越來越多的App裡面使用了模糊效果,這種模糊效果稱之為高斯模糊。大家都知道,在Android平臺上進行模糊渲染是一個相當耗CPU也相當耗時的操作,一旦處理不好,卡頓是在所難免的。一般來說,考慮到效率,渲染一張圖片最好的方法是使用OpenGL,其次是使用C++/C

Android 自定義設定圖片模糊度、高斯模糊效果

最近專案中有需要到“毛玻璃”效果,網上找一下,千篇一律。高談闊論扯淡的多,真正有用的沒幾個! 藉助此文,做修改之後,實現效果!我只是個搬運工,在此表示感謝! 淡不多扯,直接上程式碼: MainActivity: public class MainActiv

Android本地圖片或者網路圖片高斯模糊效果(毛玻璃效果)圖片模糊效果一行程式碼搞定

一,實現本地圖片或者網路圖片的毛玻璃效果特別方便,只需要把下面的FastBlurUtil類複製到你的專案中就行 package com.testdemo.blur_image_lib10;   import android.graphics.Bitmap;   import andr

android圖片特效處理之模糊效果

這篇將講到圖片特效處理的模糊效果。跟前面一樣是對畫素點進行處理,演算法是通用的,但耗時會更長,至於為什麼,看了下面的程式碼你就會明白。演算法: 一、簡單演算法:將畫素點周圍八個點包括自身一共九個點的RGB值分別相加後平均,作為當前畫素點的RGB值,即可實現效果。 舉例: A

Android學習之BlurImageView實現影象模糊效果

今天看了jj大神的部落格,裡面寫了一篇關於基於universalImageLoader實現圖片載入控制元件BlurImageView,看了不甚欣喜,就寫篇博文記錄以記之,望大家共勉之。 第一件事,上效果圖,這樣大家才能真正瞭解這個控制元件的效果,大家看了之後一

Android如何實現毛玻璃效果Android高階模糊技術

自從iOS系統引入了Blur效果,也就是所謂的毛玻璃、模糊化效果,磨砂效果,各大系統就開始競相模仿,這是怎樣的一個效果呢,我們先來看一下,如下面的圖片: 效果我們知道了,如何在Android中實現呢,說白了就是對圖片進行模糊化處理,小編先給大家講一下Android高階模糊

巧用Drawable 實現Android UI 元素間距效果

purple 固定 展示 .com otto 技巧 log contain dev 源文地址: 巧用Drawable 實現Android UI 元素間距效果 在大部分的移動UI或者Web UI都是基於網格概念而設計的。這種網格一般都是有一些對其的方塊組成,然後