El código para copiar un mapa de bits en otra es la siguiente:
Rect src = new Rect(0, 0, 50, 50);
Rect dst = new Rect(50, 50, 200, 200);
canvas.drawBitmap(originalBitmap, src, dst, null);
que especifica que desea copiar la esquina superior izquierda (50x50) de un mapa de bits y, a continuación, estirar eso en un mapa de bits de 150x150 y escríbalo 50px offset desde la esquina superior izquierda de su lienzo.
Puede desencadenar el dibujo a través de invalidate(), pero le recomiendo usar SurfaceView si está realizando una animación. El problema con la invalidación es que solo se dibuja una vez que el hilo está inactivo, por lo que no puede usarlo en un bucle, solo dibujaría el último cuadro. Aquí hay algunos enlaces a otras preguntas que he respondido sobre gráficos, podrían ser útiles para explicar a qué me refiero.
En respuesta a los comentarios, aquí hay más información: Si obtiene el lienzo de un SurfaceHolder.lockCanvas(), entonces no creo que pueda copiar los datos residuales que había en él en un mapa de bits. Pero eso no es para lo que sirve ese control: solo lo usa cuando ha resuelto todo y está listo para dibujar.
Lo que se quiere hacer es crear un lienzo que dibuja en un mapa de bits utilizando
Canvas canvas = new Canvas(yourBitmap)
A continuación, puede hacer lo transformaciones y operaciones de dibujo que desea. yourBitmap contendrá toda la información más reciente. Luego se utiliza el soporte de la superficie de este modo:
Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)
De esta manera siempre tienes yourBitmap que ha toda la información que en ella está tratando de preservar.
Lo siento, todavía no entiendo una cosa: está dibujando en un lienzo, no en un mapa de bits. Como, por lo que yo sé, los lienzos son de solo lectura, no puede dibujar el destino en uno NUEVO. –
Sí, no dibuja directamente en Bitmaps, sino a través de un lienzo. Use algo como esto: 'Bitmap someBitmap = Bitmap.createBitmap (ancho, alto, Bitmap.Config.RGB_565);' para crear un mapa de bits con dimensiones y espacio de color especificados, luego 'Canvas canvas = new Canvas (someBitmap);' para hacer los comandos de dibujo a ese lienzo modifican el mapa de bits. –
entonces, si obtengo el Lienzo de un SurfaceHolder usando lockCanvas, ¿no tengo forma de acceder a ese mapa de bits para leerlo? –