Android View.getDrawingCache devuelve nulo, solo nulo
¿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!
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
Si getDrawingCache
siempre es returning null
chicos: 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
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.)