Android DrawBitMap muy lento cuando se utiliza ARGB_8888

Me parece que DrawBitMap está tomando 50-60 ms para dibujar sólo tres mapas de bits uno es un rectángulo que ocupa la pantalla completa, uno es un círculo y otro es un camino. Mis mapas de bits se crean utilizando Canvas.drawPath, drawRect y drawCircle en un mapa de bits en blanco con el Bitmap.Config como ARGB_8888. Estoy usando ARGB_8888 para hacer el fondo visible para conseguir un efecto de estratificación. Me sorprendió encontrar el tiempo tomado como alrededor 50ms como pensé drawBitmap sería una operación muy simple. ¿Puede alguien guiar como a hay algún error fundamental que estoy haciendo. El siguiente es mi código

Creación de los mapas de bits en blanco

Rectangle = Bitmap.createBitmap(320,480,Bitmap.Config.ARGB_8888); Circle = Bitmap.createBitmap(70,70,Bitmap.Config.ARGB_8888); Leaf1 = Bitmap.createBitmap(20,30,Bitmap.Config.ARGB_8888); 

Dibujar las formas en el BitMap apropiado

 Canvas c = new Canvas(Rectangle); Paint p = new Paint(); p.setAntiAlias(true); p.setColor(0xff6e8b3e); c.drawRect(0,0,320,480,p); Canvas c = new Canvas(Circle); Paint p = new Paint(); CirclePath = new Path(); p.setAntiAlias(true); p.setColor(0xffcd661d); System.out.println("x = "+x+" y = "+y); CirclePath.addCircle(50,50,10,Path.Direction.CW); c.drawPath(CirclePath,p); Canvas c = new Canvas(Leaf1); Paint paint = new Paint(); Path path = new Path(); paint.setAntiAlias(true); path.moveTo((float)184.37,(float)219.15); path.cubicTo((float)188.32,(float)219.15,(float)192.88,(float)220.44,(float)195.62,(float)223.54); path.cubicTo((float)197.84,(float)226.05,(float)203.2,(float)229.84,(float)198.18,(float)245.98); 

Dibujo del mapa de bits en OnDraw

 canvas.drawBitmap(Rectangle,0,0,p); canvas.translate(x,y); // For animation effect canvas.drawBitmap(Circle,0,0,p); canvas.drawBitmap(Leaf1,0,0,p); 

Ahora cuando grabo el tiempo tomado para este drawBitMap tres encuentro que está tomando alrededor de 50ms ¿Hay algo error grande del tiempo en el código. Cambiar el Bitmap.Config a RGB_565 trae el tiempo abajo a cerca de 8ms pero entonces el fondo no es visible y estoy consiguiendo un rectángulo negro alrededor del camino

Parece normal. La lona es muy lenta en la transparencia.

Puede intentar cambiar a OpenGL ES o diseñar su contenido con la menor transparencia posible para que pueda utilizar RGB_565 con la mayor frecuencia posible.

Siempre debe coincidir con el formato de su pantalla. Hubo una pregunta muy similar recientemente, y Romain mencionó que blits esencialmente se convierten en memcpys si el formato coincide. Y, por supuesto, asegúrese de que no está utilizando un modo esotérico blit.

Además, ¿por qué utiliza anti-aliasing si no está escalando / rotando nada?

En cuanto a 565 no funciona – sólo estoy revisando su código. ¿Está utilizando el canal alfa? ¿Cómo son exactamente tus mapas de bits?

Uno de los desarrolladores de Android explica esto aquí . Para dibujar ARGB_8888 rápidamente necesita dibujar a una ventana de 32 bits. Ver abajo del artículo para los puntos de referencia.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.