Android 背景圖流行使用高斯模糊效果,界面效果會比較好看酗宋。分析各種實現(xiàn)方式竹祷,實現(xiàn)網(wǎng)易云音樂圖片加載高斯模糊背景。
注意:請更新 fresco 版本攀细,內(nèi)部已實現(xiàn) BlurPostProcessor
使用方式如下:
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(SINGER_URL))
.setPostprocessor(new BlurPostProcessor(10, this, 1))
.build();
PipelineDraweeController controller = (PipelineDraweeController)Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(mBlurView.getController())
.build();
mBlurView.setController(controller);
高斯模糊實現(xiàn)方式
- JavaBlur
- NativeBlur
- RenderScriptBlur
選擇合適的模糊技術(shù)
性能分析直接參考 Android高級模糊技術(shù)箫踩,結(jié)合實際開發(fā)情況爱态,本文只針對 NativeBlur 結(jié)合 Fresco 圖片修改 BasePostprocessor 實現(xiàn)高斯模糊。
代碼實踐
FastBlurPostprocessor
實現(xiàn)對圖片的高斯模糊處理
package com.android.blur;
import android.graphics.Bitmap;
import com.enrique.stackblur.NativeBlurProcess;
import com.facebook.imagepipeline.request.BasePostprocessor;
public class FastBlurPostprocessor extends BasePostprocessor {
private float mRadius;
public FastBlurPostprocessor(float blurRadius) {
this.mRadius = blurRadius;
}
public void process(Bitmap bitmap) {
try {
bitmap.setHasAlpha(true);
NativeBlurProcess blur = new NativeBlurProcess();
blur.blur(bitmap, mRadius);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getName() {
return "FastBlurPostprocessor";
}
}
修改圖片
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(SINGER_URL))
.setPostprocessor(new FastBlurPostprocessor(60f))
.build();
PipelineDraweeController controller = (PipelineDraweeController)Fresco.newDraweeControllerBuilder().setImageRequest(request)
.setOldController(mBlurView.getController())
.build();
mBlurView.setController(controller);