android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?
剛剛做技術調研,可以給一些優缺點的對比.
目前主流實現毛玻璃效果(高斯模糊)分大致三種方法:
一 利用RenderScript接口
利用現有Android結構,通過RenderScript調用底層接口實現高斯模糊計算.
// Remix Blurprivate void blur(Bitmap bkg, View view) {
…
RenderScript rs = RenderScript.create(getActivity());
Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
ScriptIntrinsicBlur blur =
ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());
blur.setInput(overlayAlloc);
blur.setRadius(radius);
blur.forEach(overlayAlloc);
overlayAlloc.copyTo(overlay);
view.setBackground(new BitmapDrawable(getResources(), overlay));
rs.destroy();
}
說明 :
這種方法直接利用Android系統提供的機制, 從代碼實現上是最簡單也相對高效的實現. 在此過程中遇到的很現實的問題是: 1. 當模糊半徑 (radius)變大后會直接出現計算性能問題. 2. ScriptIntrinsicBlur腳本模糊半徑不能大于25. 因此, 直接使用ScriptIntrinsicBlur不能得到模糊程度較高的圖片.
考慮到高斯模糊是計算周邊像素平均值,在模糊程度很高的情況下,逐點計算平均值從顯示效果上優勢并不明顯.可以通過將圖片壓縮成小圖,計算小圖的高斯模糊, 再將小圖放大的方法來模擬大半徑高斯模糊的效果.
效果如圖:模糊前/模糊后
二 在低版本Android中通過Java實現高斯模糊
可以參考如下代碼實現
這種方式通過在Java層中直接實現高斯模糊算法.在大模糊半徑和大圖片情況下,性能會出現問題.基本目前只作為對低版本Android客戶端的兼容性方案使用.
三 通過OpenGL直接實現
沒有具體實踐過, 可以參考muzei壁紙的實現, 無論從效果和實時性來講都是最好的. 但需要根據需求來看是否真的有這樣的實時性要求. 這種方式從顯示效果上會優于第一種方法,甚至可以達到漸變的效果.但這些計算都是以耗電作為代價的. 作為Launcher這種系統級別的應用, 在顯示效果差異并不明顯的情況下, 建議綜合考慮耗電量, 以及內存和計算性能的消耗.
如圖:
總結
以上是生活随笔為你收集整理的android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在上海嘉定什么地方有卖碧生源常润茶的?
- 下一篇: 更新r语言_【R语言学习最佳资料之一】R