Android tres líneas de código para lograr el desenfoque gaussiano

Diseño: Con el efecto de vidrio esmerilado, el producto se llena directamente.

Yo: Ah, sí sí sí. Iré a GayHub para ver si hay una buena solución.

Diseño: GayHub? ? ?

Encuentre una solución viable

Hay muchas formas de lograr el desenfoque gaussiano, StackBlur, RenderScript, Glide, etc. son buenas formas, pero la forma más fácil y eficiente es ir a Github.

Las palabras clave de la búsqueda son android blur, puede ver que hay dos bibliotecas adecuadas, Blurry y BlurView . Estas dos bibliotecas tienen un número relativamente alto de estrellas y todavía se mantienen.

Entonces, lo probé y descubrí que BlurView es mejor que Blur, y recomiendo encarecidamente comenzar con BlurView .

imagen-20220917223800119

Borroso

  • Ventajas: la API es muy simple de usar, el efecto también es bueno y proporciona soluciones para carga síncrona y asíncrona.

  • Desventajas: hay muchos errores extraños y solo funciona en ImageView

    • Al usarlo, básicamente encontrará estos dos errores: problema1 y problema2 .
    • problema1 (NullPointerException) ya tiene una solución lista
    • problema 2 (Canvas: tratando de usar un mapa de bits reciclado) no ha progresado desde 2017, y la probabilidad de recurrencia sigue siendo relativamente alta

BlurView (recomendado)

  • Ventajas: casi no hay errores en el proceso de uso y se llaman menos códigos durante la implementación. Y se puede lograr una vista borrosa compleja

  • Desventajas: debe configurarse en xml y toma unos segundos comprender el concepto de rootView

  • Cómo utilizar:

    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))
    复制代码
  • efecto logrado

    antes de usar:

    181663475092_.pic

    Después de su uso:

    171663475091_.pic
  • Puntas :

    • Las vistas debajo de BlurView tendrán un efecto de desenfoque gaussiano

    • rootView puede seleccionar el ViewGroup más cercano a BlurView

    • .setBlurRadius()Se puede usar para establecer el tamaño del kernel de convolución, el valor predeterminado es 16F

    • .setOverlayColor()Valor de color que se puede usar para establecer la superposición de desenfoque gaussiano

    • Por ejemplo, los siguientes parámetros se pueden configurar para lograr este efecto:

      blurView.setupWith(rootView, RenderScriptBlur(this))
                  .setBlurRadius(5F)
                  .setOverlayColor(Color.parseColor("#77000000"))
      复制代码
      191663495988_.pic
    • Finalmente, agregue el efecto de deslizamiento:

      BlurWithScrollView

Supongo que te gusta

Origin juejin.im/post/7144663860027326494
Recomendado
Clasificación