日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

毛玻璃效果简单实现

發布時間:2023/12/29 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 毛玻璃效果简单实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  項目中需要運用到毛玻璃的效果。經過搜索查閱,踩了一些坑,找到了一條暫時可行的辦法。

  其中,核心的控件是使用RenderScript這個類,這個類屬于jni類,在較低版本的Android系統中,是不具備它的相關方法的。所以我們只能使用support.v8里面的類。然而,support.v8并沒有默認地放在新建工程中,因此我們需要自己去添加。

  第一步:將D:AndroidSdkuild-tools23.0.1enderscriptlibpackaged 目錄下的armeabi-v7a和x86文件夾置于工程的libs路徑中

  

  第二步:在build.gradle中寫腳本編譯這兩個.so文件

    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {
        destinationDir file("$projectDir/libs")
        baseName "Native_Libs2"
        extension "jar"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib"
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }

  第三步:Rebuild Project

  第四步:添加剛剛編譯的jar包Native_Libs2

  

  第五步:毛玻璃效果的方法

    private void blur(Bitmap overlay, View view, int radius) {

        RenderScript rs = RenderScript.create(this);
        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();
    }

  PS:這個方法中radius為圖片模糊的粒度。我們進入setRadius方法中,可以看到

    public void setRadius(float radius) {
        if(radius > 0.0F && radius <= 25.0F) {
            this.setVar(0, radius);
        } else {
            throw new RSIllegalArgumentException("Radius out of range (0 < r <= 25).");
        }
    }

  radius最大只能是25.0

  我猜想,在設計這個方法時,開發人員也考慮到這個方法是一個時間復雜度比較高的方法,尤其在大圖片,需要較大模糊程度的情況下,會有很大的概率出現性能問題,甚至OOM。

  那么,如果我們需要比25更模糊的情況,或是,有一張較大的圖片需要模糊化時,該怎么辦呢?

  常用的方法,即是,將原來需要模糊化的圖片先縮小,再模糊化,最后再顯示。經過一輪縮小之后,系統會自動將一些象素點綜合成一個,經過模糊再放大,獲得的模糊程度將高于直接模糊化的程度。

Done!

總結

以上是生活随笔為你收集整理的毛玻璃效果简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。