实时毛玻璃效果—实时高斯模糊

前面保存了一篇随笔,是说怎么实现毛玻璃的效果,实际上就是取得view的缓存图片,经过模糊处理后,在显示出来。

这样写没有问题,但是想做到实时的效果根本不可能,由此证明自己写的代码和开源代码的差距。

下面介绍一下开源空间RealTimeBlurView,这个使用起来就非常简单,容易了。 

底层实现是自定义控件取得背景图片自己通过canvas画出来的,

实现了 ViewTreeObserver.OnPreDrawListener View的这个接口:此接口是系统要绘制视图树的时候调用的方法。

当系统要开始绘制视图树,说明视图已经改变,这样就做到了实时更新,接下来要做的就是虚化,然后drawCanvas(bitmap),更新invalidate();

把这个自定义控件,放到我们的布局中去就可以了。如果布局上需要添加空间,把它放在最下层,这样背景就是虚化的了。

<com.github.mmin18.widget.RealtimeBlurView
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	app:realtimeBlurRadius="20dp"              //这个自定义属性代表虚化程度 50 最高,0 最低
	app:realtimeOverlayColor="#8000" />            //这个属性不变就ok了,是一个8透明度的透明色

java代码中,如果不需要设置点击事件等属性的话,就不需要做任何操作。

在app中的build.gradle中

添加依赖   compile 'com.github.mmin18:realtimeblurview:1.1.0'
添加渲染支持     android {

              buildToolsVersion '24.0.2' // Use 23.0.3 or higher

            defaultConfig {

              minSdkVersion 15

               renderscriptTargetApi 19                       //渲染的目标Api   一定要加

              renderscriptSupportModeEnabled true // Enable RS support      //开启渲染模式支持  一定要加

           }


防止被混淆 在混淆文件中加上  -keep class android.support.v8.renderscript.** { *; }

 
posted @ 2017-09-12 10:36  wlwqnj  阅读(4352)  评论(0编辑  收藏  举报