前面保存了一篇隨筆,是說怎么實現毛玻璃的效果,實際上就是取得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.** { *; }
