`

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时会黑一下,不知道这个是怎么回事。

 

  • 大小: 32.6 KB
1
3
分享到:
评论

相关推荐

    android Activity间切换动画效果演示源码

    模糊效果通常通过Bitmap的模糊算法实现,比如使用RenderScript或模糊库如FastBlur。在Activity切换时,可以将当前Activity的视图模糊化作为过渡动画的一部分。模糊效果能创造出一种深度和层次感,使用户感受到更...

    android总结activity切换出现效果.zip

    本文将深入探讨Android中Activity切换的各种效果,以及如何实现它们。 首先,Activity切换效果主要通过Intent的FLAG_ACTIVITY_TRANSITION属性来控制。默认情况下,Android系统会提供平滑的淡入淡出效果,但开发者...

    android dialog背景模糊化效果实现方法

    Android Dialog 背景模糊化效果实现方法 Android Dialog 背景模糊化效果实现方法是指在 Android 应用程序中,为 Dialog 窗口设置模糊化的背景图片,以达到视觉上的美化和用户体验的提升。本文将详细介绍 Android ...

    blur android 高斯模糊 背景模糊

    `blurUtils`是一个专门为Android开发者设计的工具包,用于快速实现背景模糊效果。它包含了一些预定义的方法,可以方便地将一个Bitmap对象模糊化。使用这个工具包,你可以避免编写复杂的图像处理代码,只需几行简单的...

    Android高级应用源码-Activity切换动画--模糊、水波纹、折叠效果.zip

    Android高级应用源码-Activity切换动画--模糊、水波纹、折叠效果.zip

    android模糊效果

    5. **实时模糊**:对于需要实时更新的模糊效果,如Activity的背景模糊,可以使用`ViewTreeObserver`监听视图的改变,然后在回调中更新模糊效果。同时,使用`SurfaceView`或`TextureView`可以提高性能。 6. **性能...

    android项目下对图片高斯模糊毛玻璃自定义view

    在Android开发中,实现图片的高斯模糊效果和毛玻璃效果是常见的需求,尤其是在创建具有现代感和美观界面的应用时。本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许...

    Android应用源码之仿 [Tidy相册] 背景模糊效果.zip

    BlurMaskFilter用于创建模糊边框,而BackdropFrameRenderer则用于在Activity的根布局上添加模糊效果。 5. **性能优化**: 虽然模糊效果提升了界面美观度,但过度使用可能导致性能下降。因此,在实现模糊时应考虑...

    Android高仿IOS的Dialog效果

    1. 背景模糊:使用`androidx.core.graphics.drawable.BlurMaskFilterDrawable`或第三方库实现Dialog背景的模糊效果。 2. 动画效果:添加进入和退出动画,模拟iOS Dialog的弹出和消失效果。 3. 按钮样式:调整按钮的...

    Android高级模糊技术

    高级模糊可能涉及到更复杂的算法,如高斯模糊、径向模糊、快速模糊等,这些算法需要对图像数据进行多次迭代,以达到更自然的模糊效果。 在Android中,处理图片模糊通常包括以下步骤: 1. **读取图片**:使用` ...

    Android高级应用源码-Activity切换动画--模糊、水波纹、折叠效果.rar

    开发者可以使用`RenderScript`或者第三方库如`android-gpuimage`来实现动态模糊效果。在Activity切换时,源Activity会先被模糊处理,然后目标Activity再淡入,这样的过渡效果能增加视觉的连贯性。 2. **水波纹动画*...

    Activity切换动画--模糊、水波纹、折叠效果

    在动画过程中,可以逐渐降低Activity的透明度,模拟出从当前Activity向下一个Activity过渡时的模糊效果。同时,可以使用Android的RenderScript库来实时模糊前景视图,增加视觉层次感。 “水波纹”效果则更多地涉及...

    Android 局部毛玻璃透明效果

    除了`Renderscript`,还有其他方式实现模糊效果,如使用` Renderscript Allocations `或者` RenderTexture `,甚至可以借助第三方库,如`android-gpuimage`或`FastBlur`等。这些库往往提供更加便捷的API,同时可能...

    Android 毛玻璃效果完美实现

    在Android平台上,毛玻璃效果(通常称为模糊效果或Blur Effect)是一种流行的设计趋势,它可以为应用界面增添一种高级感和深度。iOS系统自iOS7开始引入了这种效果,但随着Android设计语言的发展,Android也开始支持...

    安卓Android源码——仿 [Tidy相册] 背景模糊效果.rar

    在安卓开发中,实现类似[Tidy相册]的背景模糊效果是常见的需求,尤其是在创建美观且用户友好的图片浏览应用时。这个压缩包文件提供了一种实现方式,让我们来详细探讨其中涉及的知识点。 首先,我们需要理解背景模糊...

    Android实现动态高斯模糊效果

    在Android开发中,实现动态高斯模糊效果是一个常见的需求,特别是在设计美观的用户界面时。高斯模糊是一种图像处理技术,它可以将图像变得模糊,从而减少噪声和降低细节层次。这种效果在iOS应用中尤为常见,例如网易...

Global site tag (gtag.js) - Google Analytics