Tengo una aplicación de dibujo que permite al usuario dibujar en un lienzo en blanco. Estoy intentando dibujar una 'miniatura' escalada del mapa de bits actual para que cuando el usuario haya escalado en la Vista, puedan hacer referencia a la miniatura para tener una idea de dónde están en el lienzo del dibujo general. Tengo la escala funcionando, y estoy mostrando la miniatura en la ubicación correcta, pero parece que la miniatura no se está actualizando en los registros subsiguientes cuando se agregan nuevas líneas/formas.Lienzo de escala en Android Bitmap
Así que tengo acceso al mapa de bits subyacente para esta vista (para mostrar la imagen en miniatura, capaz de guardar fácilmente el mapa de bits en un archivo, etc) Yo lo siguiente en onSizeChanged() para el Vista:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// set the canvas height, panning, etc, based on the now inflated View
mWidth = getWidth();
mHeight = getHeight();
mAspectRatio = mWidth/mHeight;
mPanX = 0;
mPanY = 0;
// create the Bitmap, set it to the canvas
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
draw(mCanvas);
}
Entonces, cuando el usuario dibuja e invalidar() se llama, hago lo siguiente en onDraw() para generar la miniatura:
@Override
protected void onDraw(Canvas canvas) {
<snipped code that draws paths, shapes to canvas>
if (mScaled) {
Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
}
}
la miniatura se mostrará en el espacio definido por thumbnailRectF utilizando el thumbCanvasPaint , pero en las siguientes llamadas a OnDraw(), el mapa de bits escalado tiene no ha cambiado desde su estado original, aunque el lienzo activo de tamaño completo muestra todos los dibujos, etc. Según algunas pruebas, me parece que mientras estoy configurando el mapa de bits con la llamada inicial para dibujar (mCanvas) ;, subsiguientesDraws están escribiendo en el mapa de bits subyacente en lugar del especificado en onSizeChanged().
Creo que estoy intentando averiguar cómo ato el lienzo onDraw a un mapa de bits al que puedo acceder fácilmente para realizar nuevos tamaños, guardar, etc. Al mirar this question, pensé que el sorteo (mCanvas) ; call vincularía el onDraw al mapa de bits especificado en mCanvas (en mi caso, mBitmap), pero en la práctica, no parece estar funcionando, en lo que se refiere a actualizaciones para el lienzo.
Gracias,
Paul
Puedo ver la similitud de su solución con este ejemplo: http://www.barebonescoder.com/2010/06/android-development-simple-2d-graphics-part-1/ – Lumis
Wow, sí, eso el programa vinculado está construido casi al 100%, a excepción de mi problema con vincular el mapa de bits al lienzo, etc. Probar esta solución ahora. –