前面保存了一篇随笔,是说怎么实现毛玻璃的效果,实际上就是取得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.** { *; }