Android clipPath equivalente para hardware acelerado Ver

La única parte de mi aplicación que todavía se procesa software es la representación de una vista donde necesito dibujar un mapa de bits redondo. Estoy usando clipPath para recortar el mapa de bits que necesito renderizar a la forma redonda.

Entiendo que clipPath no es hardware acelerado, pero estoy buscando un algoritmo que me permita proporcionar la funcionalidad equivalente mediante aceleración de hardware.

Específicamente, necesito crear una región de recorte redondeada de un mapa de bits de origen y tenerla renderizada a mi lienzo.

Si tiene que usar clipPath puede apagar la aceleración de hardware como se muestra a continuación.

<application android:label="@string/application_name" android:hardwareAccelerated="false"> 

Y también podría controlar la aceleración de hardware entre las capas Application, Activity, Window y View. Información detallada que se describe en este artículo de Aceleración de hardware en el sitio web de desarrollo de Android .

Usted podría intentar esto, aunque no estoy seguro de que sea hardware acelerado:

En onCreate:

En onLayout:

  • Crear un mapa de bits del mismo tamaño que su vista
  • Dibuja tu círculo dentro de su lienzo, en blanco, usando un alias anti para un borde limpio

En onDraw:

  • Dibuja el mapa de bits con el círculo blanco en el lienzo de pintura
  • Ahora, dibuja tu mapa de bits dentro de tu lienzo de pintura usando el bitmapPaint que creaste en onCreate

El mapa de bits se debe representar dentro del círculo solamente.

Si su mapa de bits no cambia mucho, clip de una vez a la forma en un nuevo mapa de bits y, a continuación, dibuje el mapa de bits recortado en su onDraw.

A continuación, se muestra un ejemplo de cómo cortar un círculo de un mapa de bits de origen

 Bitmap bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); Canvas canvas = new Canvas(bitmap); paint.setColor(Color.RED); // Draw your shape here canvas.drawCircle(cx, cy, radius, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(sourceBitmap, 0, 0, paint); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.