效果图如下:
代码如下:
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时会黑一下,不知道这个是怎么回事。
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 843scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 494如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 694my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 944基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14731.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1045ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 998一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11511.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1323Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2236android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 767SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1146Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 1005方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 672Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 668在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 1008关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 787有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 833究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 817首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 935https://developers.google.com/ ...
相关推荐
模糊效果通常通过Bitmap的模糊算法实现,比如使用RenderScript或模糊库如FastBlur。在Activity切换时,可以将当前Activity的视图模糊化作为过渡动画的一部分。模糊效果能创造出一种深度和层次感,使用户感受到更...
本文将深入探讨Android中Activity切换的各种效果,以及如何实现它们。 首先,Activity切换效果主要通过Intent的FLAG_ACTIVITY_TRANSITION属性来控制。默认情况下,Android系统会提供平滑的淡入淡出效果,但开发者...
Android Dialog 背景模糊化效果实现方法 Android Dialog 背景模糊化效果实现方法是指在 Android 应用程序中,为 Dialog 窗口设置模糊化的背景图片,以达到视觉上的美化和用户体验的提升。本文将详细介绍 Android ...
`blurUtils`是一个专门为Android开发者设计的工具包,用于快速实现背景模糊效果。它包含了一些预定义的方法,可以方便地将一个Bitmap对象模糊化。使用这个工具包,你可以避免编写复杂的图像处理代码,只需几行简单的...
Android高级应用源码-Activity切换动画--模糊、水波纹、折叠效果.zip
5. **实时模糊**:对于需要实时更新的模糊效果,如Activity的背景模糊,可以使用`ViewTreeObserver`监听视图的改变,然后在回调中更新模糊效果。同时,使用`SurfaceView`或`TextureView`可以提高性能。 6. **性能...
在Android开发中,实现图片的高斯模糊效果和毛玻璃效果是常见的需求,尤其是在创建具有现代感和美观界面的应用时。本项目旨在教你如何在Android项目中创建一个自定义View,用于实现高斯模糊和毛玻璃效果,并且允许...
BlurMaskFilter用于创建模糊边框,而BackdropFrameRenderer则用于在Activity的根布局上添加模糊效果。 5. **性能优化**: 虽然模糊效果提升了界面美观度,但过度使用可能导致性能下降。因此,在实现模糊时应考虑...
1. 背景模糊:使用`androidx.core.graphics.drawable.BlurMaskFilterDrawable`或第三方库实现Dialog背景的模糊效果。 2. 动画效果:添加进入和退出动画,模拟iOS Dialog的弹出和消失效果。 3. 按钮样式:调整按钮的...
高级模糊可能涉及到更复杂的算法,如高斯模糊、径向模糊、快速模糊等,这些算法需要对图像数据进行多次迭代,以达到更自然的模糊效果。 在Android中,处理图片模糊通常包括以下步骤: 1. **读取图片**:使用` ...
开发者可以使用`RenderScript`或者第三方库如`android-gpuimage`来实现动态模糊效果。在Activity切换时,源Activity会先被模糊处理,然后目标Activity再淡入,这样的过渡效果能增加视觉的连贯性。 2. **水波纹动画*...
在动画过程中,可以逐渐降低Activity的透明度,模拟出从当前Activity向下一个Activity过渡时的模糊效果。同时,可以使用Android的RenderScript库来实时模糊前景视图,增加视觉层次感。 “水波纹”效果则更多地涉及...
除了`Renderscript`,还有其他方式实现模糊效果,如使用` Renderscript Allocations `或者` RenderTexture `,甚至可以借助第三方库,如`android-gpuimage`或`FastBlur`等。这些库往往提供更加便捷的API,同时可能...
在Android平台上,毛玻璃效果(通常称为模糊效果或Blur Effect)是一种流行的设计趋势,它可以为应用界面增添一种高级感和深度。iOS系统自iOS7开始引入了这种效果,但随着Android设计语言的发展,Android也开始支持...
在安卓开发中,实现类似[Tidy相册]的背景模糊效果是常见的需求,尤其是在创建美观且用户友好的图片浏览应用时。这个压缩包文件提供了一种实现方式,让我们来详细探讨其中涉及的知识点。 首先,我们需要理解背景模糊...
在Android开发中,实现动态高斯模糊效果是一个常见的需求,特别是在设计美观的用户界面时。高斯模糊是一种图像处理技术,它可以将图像变得模糊,从而减少噪声和降低细节层次。这种效果在iOS应用中尤为常见,例如网易...