Tamaño de pantalla de Android Scaling Canvas

Tengo una aplicación de dibujo que permite al usuario dibujar a un lienzo en blanco. Estoy tratando de dibujar una "miniatura" escalada del mapa de bits actual para que cuando el usuario ha escalado en la vista, pueden hacer referencia a la miniatura para tener una idea de dónde están en el lienzo de 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 onDraws posteriores cuando nuevas líneas / formas se agregan.

Así que tengo acceso al mapa de bits subyacente para esta vista (para mostrar la miniatura, ser capaz de guardar fácilmente el mapa de bits a un archivo, etc) hago lo siguiente en onSizeChanged () para la 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 y invalidate () es llamado, 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 muestra en el espacio definido por thumbnailRectF utilizando el thumbCanvasPaint, pero en las siguientes llamadas onDraw (), el mapa de bits escalado no ha cambiado de su estado original, aunque el lienzo activo de tamaño completo muestra todos los dibujos, etc. En algunas pruebas, me parece que mientras estoy configurando el mapa de bits con la llamada inicial a dibujar (mCanvas) ;, los onDraws siguientes están escribiendo en el mapa de bits subyacente en lugar de la especificada en onSizeChanged ().

Por lo tanto, supongo que estoy tratando de averiguar cómo atar el lienzo onDraw a un mapa de bits que puedo readliy acceso a realizar re-tamaños, guardar, etc Mirando a esta pregunta , pensé que el sorteo (mCanvas); Call ataría el onDraw al bitmap especificado en el mCanvas (en mi caso, mBitmap), pero en la práctica, no parece estar funcionando, en lo que respecta a las actualizaciones del lienzo.

Gracias,

Pablo

 canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint); 

Debe cambiar a

 canvas.drawBitmap(out, new Rect(0,0,mBitmap.getWidht, mBitmap.getheight), thumbnailRectF, thumbCanvasPaint); 

No hay necesidad de

 Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int).... 

Compruebe también que mScaled es true todo el tiempo cuando el zoom es mayor que 1

Escala de mapa de bits por Bitmap.createScaledBitmap luego dibujar no funcionará

La solución para la escala del mapa de bits de lienzo es utilizar esta función (desde los documentos )

 void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint) // dst : Rect: The rectangle that the bitmap will be scaled/translated to fit into 

Por lo que al cambiar el tamaño de dst , su tamaño de mapa de bits cambiará

Aquí está el ejemplo si quiero dibujar un mapa de bits en la parte superior izquierda y la escala a 100px x 120px

 Bitmap bitmap = BitmapFactory.decodeResource(...);//bitmap to be drawn float left = 0; float top = 0; RectF dst = new RectF(left, top, left + 100, top + 120); // width=100, height=120 canvas.drawBitmap(bitmap, null, dst, null); 
  • Generar mapa de bits de HTML en Android
  • Java.lang.OutOfMemoryError: tamaño de mapa de bits supera el presupuesto de VM en ListView y imágenes de carga perezosa
  • ¿Por qué setImageBitmap no tiene efecto en ImageButton personalizado?
  • Android: actualiza el mapa de bits del hilo del temporizador
  • trabajar con imágenes grandes en android
  • Cómo hacer una miniatura de una foto tomada de la cámara?
  • Decodificar la matriz de bytes en el mapa de bits que se ha comprimido en Java
  • Tamaño del mapa de bits de Android Widget
  • Recortar mapa de bits sin leer todo el mapa de bits primero
  • ¿Cómo puedo reconocer qué área de una imagen (no sólo las coordenadas) se ha tocado en Android?
  • Android - comprimir mapa de bits antes de guardarlo en SDCARD en actividad para obtener resultados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.