Recientemente solo quiero probar algunas herramientas y escribir algunos blogs básicos.
Cuando usamos Xermode por primera vez para lograr algunos efectos similares a los avatares circulares, el recorte no ocurrió como se esperaba. Esto se debió a que pasamos por alto una cosa. Xfermode actúa en dos niveles de imagen para recortarse entre sí, y no se da por sentado que lo haga. es la última vista que dibujaste, ¡pero la placa inferior del lienzo completo actual! ¡Por supuesto que hay un problema!
Entonces, ¿cómo solucionar este problema? Almacenamiento en búfer fuera de la pantalla !
El búfer fuera de pantalla de Android es una tecnología de representación de gráficos que permite dibujar imágenes en un área de memoria separada en lugar de hacerlo directamente en la pantalla. Hay varios beneficios al hacer esto:
-
Rendimiento mejorado: el almacenamiento en búfer fuera de la pantalla puede aumentar significativamente la velocidad de representación de gráficos. Dado que todas las operaciones de dibujo ocurren en la memoria, no es necesario interactuar con la pantalla, lo que reduce la latencia y el tiempo de procesamiento.
-
Evite el parpadeo: pueden ocurrir problemas de parpadeo cuando se dibujan varios elementos gráficos en el mismo cuadro al mismo tiempo. El almacenamiento en búfer fuera de la pantalla evita esta situación porque la operación de dibujo se completa en la memoria antes de que los resultados se muestren en la pantalla todos a la vez.
-
Logre efectos gráficos avanzados: utilice el almacenamiento en búfer fuera de la pantalla para lograr algunos efectos gráficos avanzados, como sombras, reflejos y desenfoques. Estos efectos a menudo requieren cálculos complejos de múltiples elementos gráficos y su composición.
En Android, el almacenamiento en búfer fuera de la pantalla se puede lograr creando un objeto Bitmap. Podemos dibujar en el objeto Bitmap y luego pasarlo al objeto Canvas para mostrarlo en la pantalla. Además, Android también proporciona algunas API de gráficos avanzadas, como OpenGL ES, que pueden realizar almacenamiento en búfer fuera de la pantalla y renderizar de manera más flexible.
Parece misterioso, ¿verdad? De hecho, el concepto no es complicado.
En Android, el almacenamiento en búfer fuera de la pantalla se puede lograr creando un objeto Bitmap. Aquí hay un código de ejemplo simple:
// 创建一个位图对象
Bitmap offscreenBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 创建一个画布对象
Canvas offscreenCanvas = new Canvas(offscreenBitmap);
// 在画布上进行绘制操作
offscreenCanvas.drawXXX(...);
// 将离屏缓冲绘制到屏幕上
canvas.drawBitmap(offscreenBitmap, x, y, null);
En este ejemplo, primero creamos un Bitmap
objeto que representa un área de memoria de un tamaño específico. A continuación, utilizamos Canvas
el objeto para manipular este mapa de bits y realizar varias operaciones de dibujo. Finalmente, dibujamos este mapa de bits en la pantalla, lo que se puede drawBitmap()
lograr usando el método.
Cabe señalar que el almacenamiento en búfer fuera de la pantalla ocupará más espacio de memoria, por lo que al usarlo, debe prestar atención a liberar recursos a tiempo para evitar pérdidas de memoria. Además, el efecto del almacenamiento en búfer fuera de la pantalla también se verá afectado por el rendimiento del hardware y los escenarios de uso, y debe optimizarse según circunstancias específicas.
Por supuesto, no necesitamos implementar manualmente el proceso anterior. Los funcionarios de Android han encapsulado las funciones correspondientes para nosotros:
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
val rectF = RectF()
val count = canvas.saveLayer(rectF, null)
//....对选中划出部分的画板(rectF)执行相应的绘制操作
canvas.restoreToCount(count)
}