Android View.getDrawingCache devuelve nulo, solo nulo

Resuelto Bex asked hace 54 años • 10 respuestas

¿Alguien podría intentar explicarme por qué?

public void addView(View child) {
  child.setDrawingCacheEnabled(true);
  child.setWillNotCacheDrawing(false);
  child.setWillNotDraw(false);
  child.buildDrawingCache();
  if(child.getDrawingCache() == null) { //TODO Make this work!
    Log.w("View", "View child's drawing cache is null");
  }
  setImageBitmap(child.getDrawingCache()); //TODO MAKE THIS WORK!!!
}

¿SIEMPRE registra que el caché de dibujo es nulo y establece el mapa de bits en nulo?

¿Tengo que dibujar la vista antes de configurar el caché?

¡Gracias!

Bex avatar Jan 01 '70 08:01 Bex
Aceptado

Yo también estaba teniendo este problema y encontré esta respuesta:

v.setDrawingCacheEnabled(true);

// this is the important code :)  
// Without it the view will have a dimension of 0,0 and the bitmap will be null          
v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 

v.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false); // clear drawing cache
Marcio Covre avatar Jan 06 '2011 17:01 Marcio Covre

Si getDrawingCachesiempre es returning nullchicos: usen esto:

public static Bitmap loadBitmapFromView(View v) {
     Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
     Canvas c = new Canvas(b);
     v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
     v.draw(c);
     return b;
}

Referencia: https://stackoverflow.com/a/6272951/371749

cV2 avatar Aug 13 '2012 15:08 cV2

La razón básica por la que se obtienen valores nulos es que la vista no está acotada. Entonces, todos los intentos, utilizando view.getWidth(), view.getLayoutParams().width, etc., incluidos view.getDrawingCache() y view.buildDrawingCache(), son inútiles. Por lo tanto, primero debe establecer las dimensiones de la vista, por ejemplo:

view.layout(0, 0, width, height);

(Ya has configurado el 'ancho' y el 'alto' como quieras o los has obtenido con WindowManager, etc.)

Apostolos avatar Mar 13 '2016 10:03 Apostolos