android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?
剛剛做技術(shù)調(diào)研,可以給一些優(yōu)缺點(diǎn)的對(duì)比.
目前主流實(shí)現(xiàn)毛玻璃效果(高斯模糊)分大致三種方法:
一 利用RenderScript接口
利用現(xiàn)有Android結(jié)構(gòu),通過(guò)RenderScript調(diào)用底層接口實(shí)現(xiàn)高斯模糊計(jì)算.
// 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();
}
說(shuō)明 :
這種方法直接利用Android系統(tǒng)提供的機(jī)制, 從代碼實(shí)現(xiàn)上是最簡(jiǎn)單也相對(duì)高效的實(shí)現(xiàn). 在此過(guò)程中遇到的很現(xiàn)實(shí)的問(wèn)題是: 1. 當(dāng)模糊半徑 (radius)變大后會(huì)直接出現(xiàn)計(jì)算性能問(wèn)題. 2. ScriptIntrinsicBlur腳本模糊半徑不能大于25. 因此, 直接使用ScriptIntrinsicBlur不能得到模糊程度較高的圖片.
考慮到高斯模糊是計(jì)算周邊像素平均值,在模糊程度很高的情況下,逐點(diǎn)計(jì)算平均值從顯示效果上優(yōu)勢(shì)并不明顯.可以通過(guò)將圖片壓縮成小圖,計(jì)算小圖的高斯模糊, 再將小圖放大的方法來(lái)模擬大半徑高斯模糊的效果.
效果如圖:模糊前/模糊后
二 在低版本Android中通過(guò)Java實(shí)現(xiàn)高斯模糊
可以參考如下代碼實(shí)現(xiàn)
這種方式通過(guò)在Java層中直接實(shí)現(xiàn)高斯模糊算法.在大模糊半徑和大圖片情況下,性能會(huì)出現(xiàn)問(wèn)題.基本目前只作為對(duì)低版本Android客戶端的兼容性方案使用.
三 通過(guò)OpenGL直接實(shí)現(xiàn)
沒(méi)有具體實(shí)踐過(guò), 可以參考muzei壁紙的實(shí)現(xiàn), 無(wú)論從效果和實(shí)時(shí)性來(lái)講都是最好的. 但需要根據(jù)需求來(lái)看是否真的有這樣的實(shí)時(shí)性要求. 這種方式從顯示效果上會(huì)優(yōu)于第一種方法,甚至可以達(dá)到漸變的效果.但這些計(jì)算都是以耗電作為代價(jià)的. 作為L(zhǎng)auncher這種系統(tǒng)級(jí)別的應(yīng)用, 在顯示效果差異并不明顯的情況下, 建議綜合考慮耗電量, 以及內(nèi)存和計(jì)算性能的消耗.
如圖:
總結(jié)
以上是生活随笔為你收集整理的android 实现磨砂效果_Android 5.0 下毛玻璃(磨砂)效果如何实现?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在上海嘉定什么地方有卖碧生源常润茶的?
- 下一篇: android sina oauth2.