Android 三行代码实现高斯模糊效果

 更新时间:2022年09月26日 10:31:15   作者:很好奇  
这篇文章主要介绍了Android 三行代码实现高斯模糊效果,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

设计:有了毛玻璃效果,产品的逼格直接拉满了呀

我:啊,对对对。我去 GayHub 上找找有没有好的解决方案吧

设计:GayHub ???

可行的方案

要实现高斯模糊的方式有很多,StackBlur、RenderScript、Glide 等等都是不错的方式,但最简单直接效率最高的方式,还得是上 Github。

搜索的关键词为 android blur,可以看到有两个库是比较合适的, Blurry 和 BlurView。 这两个库 Star 数比较高,并且也还在维护着。

于是,便尝试了一番,发现 BlurView 比 Blurry 更好用,十分推荐上手 BlurView

Blurry

  • 优点:API 使用非常简洁,效果也不错,提供同步和异步加载的解决方案

  • 缺点:奇奇怪怪的 Bug 非常多,并且只能作用于 ImageView

    • 使用时,基本会遇到这两个 Bug:issue1 和 issue2 。
    • issue1(NullPointerException) 已经有现成的解决方案
    • issue2(Canvas: trying to use a recycled bitmap) 则从 17 年至今毫无进展,并且复现概率还比较高

BlurView(推荐)

  • 优点:使用的过程中几乎没有遇到 bug,实现时调用的代码较少。并且,可以实现复杂的模糊 View
  • 缺点:需要在 xml 中配置,并且需要花几秒钟的时间理解一下 rootView 的概念

使用方式:

XML:

<androidx.constraintlayout.widget.ConstraintLayout
  ... 
  android:id="@+id/rootView"
  android:background="@color/purple_200" >
  
  <ImageView
    ... 
    android:id="@+id/imageView" />
  
  <eightbitlab.com.blurview.BlurView
    ... 
    android:id="@+id/blurView" />
​
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity#onCreate:

// 这里的 rootView,只要是 blurView 的任意一个父 View 即可
val rootView = findViewById<ConstraintLayout>(R.id.rootView)
val blurView = findViewById<BlurView>(R.id.blurView)
blurView.setupWith(rootView, RenderScriptBlur(this))

实现的效果:

使用前:

使用后:

Tips :

  • 在 BlurView 以下的 View 都会有高斯模糊的效果
  • rootView 可以选择离 BlurView 最近的 ViewGroup
  • .setBlurRadius() 可以用来设置卷积核的大小,默认是 16F
  • .setOverlayColor() 可以用来设置高斯模糊覆盖的颜色值

例如如下参数配置时可以达到这样的效果:

blurView.setupWith(rootView, RenderScriptBlur(this))
            .setBlurRadius(5F)
            .setOverlayColor(Color.parseColor("#77000000"))

最后,再补充一下滑动时的效果:

到此这篇关于Android 三行代码实现高斯模糊效果的文章就介绍到这了,更多相关Android高斯模糊内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android深入探究自定义View之嵌套滑动的实现

    Android深入探究自定义View之嵌套滑动的实现

    什么是嵌套滑动?当我们向下滑动时,首先是外部的布局向下滑动,然后才是内部的RecyclerView滑动,向上滑动也是如此。这就是嵌套滑动的效果
    2021-11-11
  • Android 中ContentProvider的实例详解

    Android 中ContentProvider的实例详解

    这篇文章主要介绍了Android 中ContentProvider的实例详解的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • Android使用RecyclerView实现投票系统

    Android使用RecyclerView实现投票系统

    这篇文章主要为大家详细介绍了Android使用RecyclerView实现投票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Android 使用PopupWindow实现弹出更多的菜单实例详解

    Android 使用PopupWindow实现弹出更多的菜单实例详解

    最近想要做一个弹出更多的菜单,而原生的弹出菜单却不是我们想要的效果,所以必然要自定义菜单。接下来通过本文给大家介绍android 使用popupwindow实现弹出更多的菜单实例详解,需要的朋友可以参考下
    2017-04-04
  • Android DataBinding类关系深入探究

    Android DataBinding类关系深入探究

    看了谷歌官方文章确实写的太简略了,甚至看完之后有很多地方还不知道怎么回事儿或者怎么用,那么接下来我将通过文章全面介绍一下DataBinding类关系
    2022-11-11
  • Android APP性能优化分析

    Android APP性能优化分析

    这篇文章主要给大家讲了Android APP性能优化相关的思考以及优化重点分析,需要的朋友参考下吧。
    2017-12-12
  • Android制作简单的普通购物车

    Android制作简单的普通购物车

    这篇文章主要介绍了Android制作简单的普通购物车,利用ExpandabeListView制作购物车功能,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android 内存优化知识点梳理总结

    Android 内存优化知识点梳理总结

    这篇文章主要介绍了Android 内存优化知识点梳理总结,Android 操作系统给每个进程都会分配指定额度的内存空间,App 使用内存来进行快速的文件访问交互,长时间如此便需要优化策略,文章分享优化知识点总结,需要的朋友可以参考一下
    2022-06-06
  • Android studio实现简单计算器的编写

    Android studio实现简单计算器的编写

    这篇文章主要为大家详细介绍了Android studio实现简单计算器的编写,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • ExpandableListView实现简单二级列表

    ExpandableListView实现简单二级列表

    这篇文章主要为大家详细介绍了ExpandableListView实现简单二级列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论