2012-04-15 22 views
5

Cuando trato de poner un mapa de bits en un widget He utilizado este:setImageViewBitmap que no trabajan en widget Android

theBitmap = Bitmap.createBitmap(WW, HH, 
      Bitmap.Config.ARGB_8888); 
. 
. 
// draw something using a canvas 
. 
. 
rviews.setImageViewBitmap(R.id.time,theBitmap); 

Esto funciona en mi teléfono, pero no en mi tableta Galaxy o Galaxy Note,

si copio theBitmap en una nueva ARGB_4444 entonces funciona en todos los dispositivos:

Bitmap clone= theBitmap.copy(Bitmap.Config.ARGB_4444, false); // workaround 
rviews.setImageViewBitmap(R.id.time, clone); 
+0

¿Podría ser lo mismo que: http://code.google.com/p/android/issues/detail?id=8489? – Heinrisch

+0

sí, ya vi esto antes, pero necesito ARGB_8888 por su calidad y transparencia. – AVEbrahimi

+0

Es probable que necesite enviar menos datos, lo que significa una imagen más pequeña o muestreada, o pasar el URI a la imagen. – wsanville

Respuesta

6

en primer lugar, w ithout su solución, comprobar su salida Logcat para:

ERROR/JavaBinder(20204): !!! FAILED BINDER TRANSACTION !!! 

Probablemente usted está golpeando el límite de tamaño de archivo para la transacción IPC que contiene los cambios en la jerarquía RemoteViews.

Cuando se copia el mapa de bits con el Bitmap.Config.ARGB_4444 configuración, cada píxel se representarán con 2 bytes, mientras que Bitmap.Config.ARGB_8888 (la configuración por defecto de 2.3 en adelante) cada píxel es de 4 bytes [Source].

Al usar su solución, está transmitiendo la mitad de datos y, por lo tanto, rechinando según el límite de tamaño. This post sugiere que el límite de tamaño es de 1 MB, pero no estoy seguro de si eso varía según la versión del sistema operativo o el fabricante.

Actualización: Un enfoque diferente para pasar una imagen sería no enviar el mapa de bits en sí, sino pasar un URI al archivo en el disco. Luego, debe asegurarse de que otros procesos tengan acceso de lectura a su archivo (el iniciador se ejecutará en un proceso diferente, por ejemplo). Si está escribiendo archivos en su directorio /data/data/my.package.name/, puede hacerlo especificando MODE_WORLD_READABLE en Context.openFileOutput(). Por ejemplo:

remoteViews.setUri(R.id.time, "setImageURI", Uri.fromFile(file)); 
+1

Ese setUri funciona como un encanto. – Grimmace

+0

setUri realmente me ayudó. Un gran consejo ... ¡gracias! – tronious

Cuestiones relacionadas