¿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 la caché de dibujo es nula y establece el mapa de bits en nulo?
¿Tengo que dibujar la vista antes de configurar la caché?
¡Gracias!
getDrawingCache()
usoView#draw
paraCanvas
acercarseRespuestas:
También estaba teniendo este problema y encontré esta respuesta:
fuente
si
getDrawingCache
siempre esreturning null
chicos: usa esto:Referencia: https://stackoverflow.com/a/6272951/371749
fuente
getLayoutParams
lugar de v.getWidth () y v.getHeight ()?ImageView
aún no ha recibido una imagen, por lo que parece ser 0. Esto se desarrollaría de manera diferente para el código de diferentes personas, pero asegúrese de que su llamada aloadBitmapFromView()
sea definitivamente posterior tuImageView
contiene una imagen.La razón básica por la que se obtienen valores nulos es que la vista no está dimensionada. Entonces, todos los intentos, usando view.getWidth (), view.getLayoutParams (). Width, etc., incluyendo view.getDrawingCache () y view.buildDrawingCache (), son inútiles. Por lo tanto, primero debe establecer las dimensiones de la vista, por ejemplo:
(Ya ha configurado 'ancho' y 'alto' como desee u obtenido con WindowManager, etc.)
fuente
Estoy usando esto en su lugar.
fuente
Trabaja mejor 4me
fuente
Si la vista que desea capturar realmente se muestra en la pantalla, pero devuelve nulo. Eso significa que captura la vista antes de que el Administrador de ventanas la genere. Algunos diseños son muy complicados. Si el diseño incluye diseños anidados, layout_weight..etc, hace que varias veces la retransmisión obtenga el tamaño exacto. La mejor solución es esperar hasta que el administrador de ventanas termine el trabajo y luego obtener una captura de pantalla. Intente poner getDrawingCache () en el controlador.
fuente
Las respuestas de @ cV2 y @ nininho funcionan para mí.
Una de las otras razones por las que descubrí por las malas fue que la vista que tenía estaba generando una vista que tiene un ancho y un alto de 0 ( es decir, imagina tener un TextView con una cadena de texto de una cadena vacía ). En este caso, getDrawingCache devolverá un valor nulo, así que asegúrese de verificarlo. Espero que ayude a algunas personas.
fuente
El error puede deberse a que su Vista es demasiado grande para caber en la memoria caché de dibujos .
Obtuve la explicación de mi problema "View.getDrawingCache devuelve nulo" de mis registros:
Android docs también dice : Los dispositivos Android pueden tener tan solo 16 MB de memoria disponible para una sola aplicación. Es por eso que no puede cargar mapas de bits grandes.
fuente
Estoy tratando de crear el número n de imágenes dinámicamente según la vista.
Creo que este código ayudará a alguien ...
fuente
Esta es la forma simple y eficiente de obtener mapas de bits.
fuente