Cómo evitar el puntero nulo en View.getDrawingCache ()?
Mi aplicación tiene este fragmento de código
mView.setDrawingCacheEnabled(true); mBitmap = Bitmap.createBitmap(mView.getDrawingCache());
Donde mView es una instancia de una subclase personalizada de FrameLayout. La aplicación ha funcionado bien durante 6 meses con miles de usuarios. Recientemente recibí pocos informes (posiblemente del mismo usuario pero no puedo confirmar) sobre un puntero nulo pasado a createBitmap (). No sé qué hardware o versión de Android que el usuario utiliza.
- Lienzo en no actualizar
- Problema con revelación circular y CircularRevealLibrary en Android
- ¿Necesito liberar View.OnClickListener de las vistas durante onDestroy?
- Ejemplo de uso de ContentLoadingProgressBar
- ¿Agregar y quitar vistas en Android dinámicamente?
¿Qué puede causar getDrawingCache () para devolver null aunque he habilitado la caché justo antes de ella? ¿Está relacionado con la aceleración de hardware en los nuevos teléfonos? ¿Es debido a la RAM insuficiente para el mapa de bits? ¿Algo más? ¿Se puede prevenir?
Editar: He encontrado esta solución aquí http://tinyurl.com/7yranvj . ¿Es una solución razonable?
mBitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(mBitMap); mView.draw(canvas);
- XY errónea al dibujar CircularImage
- ¿Por qué http://schemas.android.com/apk/res-auto "sólo funciona para proyectos de biblioteca?
- Seguimiento de la velocidad de una vista en movimiento
- FindViewById () no funciona en una clase no MainActivity
- Java.lang.IllegalArgumentException: pointerIndex fuera de rango Exception - dispatchTouchEvent
- Hacer bitmap azulejo dibujable en x pero estirar en y
- Android: Duplicar el elemento View en el grupo ViewGroup
- En la aplicación Google Play, ¿cómo se implementa el ViewGroup que muestra las listas superiores de aplicaciones?
En realidad su suposición era correcta. Si está utilizando la capa acelerada de hardware, no puede utilizar la caché de dibujo. Los nuevos dispositivos tienen aceleración de hardware activada de forma predeterminada, por lo que podría ser su problema. Puede desactivar la aceleración de hardware para una vista única como esta.
if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null); frame.setDrawingCacheEnabled(true);
- JavaScript no funciona en Android WebView
- GLES2.0: Usar GL_TEXTURE_EXTERNAL_OES a través de glEGLImageTargetTexture2DOES