Tamaño de MediaStyle LargeIcon
Estoy implementando una notificación estilo Lollipop a una aplicación de reproductor de música streaming FTP usando la nueva clase Notification.MediaStyle. Estoy configurando el álbum de arte como mi "gran icono".
Dado que la imagen del álbum se toma directamente del archivo que se está reproduciendo actualmente, el tamaño de este álbum varía dependiendo de la fuente (potencialmente hasta 5000×5000).
- BitmapFactory.decodeResource y inexplicable Fuera de memoria
- En Android cómo decodificar un jpeg en formato cmyk color?
- Android cómo escalar una imagen con las opciones de BitmapFactory
- ¿Por qué la decodificación de mapa de bits con inBitmap siempre recibe java.lang.IllegalArgumentException: Decodificación de P ro blem en bitmap existente
- ImageView y el muestreo GIF grande
De mi código pre-lollipop decodificar el mapa de bits con un tamaño máximo definido por: android.R.dimen.notification_large_icon_width
y
android.R.dimen.notification_large_icon_height
Que funciona bien como el tiempo de descodificación es mucho más rápido y el uso de la memoria es ideal.
Sin embargo, cuando se aplica este código a mi estilo de MediaStyle, la vista expandida utiliza un icono mucho mayor que el definido por los parámetros de dimensión, lo que resulta en una imagen de álbum borrosa cuando se amplía.
¿Hay alguna constante para definir el tamaño máximo de la vista expandida para un icono de MediaStyle grande puede ser? ¿O hay alguna solución a este problema? En su estado actual, es inaceptable que el arte se descodifique con resolución completa, ya que puede provocar que la aplicación se bloquee debido a OOM.
- Picasso no puede decodificar algunas imágenes: skia decode devuelto false
- Android: Quiero grabar una alimentación de vídeo de baja calidad y enviarla en paquetes discretos. ¿Es posible? ¿Cómo lo abordarías?
- Convertir Bitmap en la memoria a Bitmap con Bitmap.Config.RGB_565
- Cambiar el tamaño de la imagen generada por BitmapFactory.decodeByteArray ()
- Cómo solucionar problemas de java.lang.OutOfMemoryError en Android
- BitmapFactory.decodeStream (InputStream es) devuelve null para InputStream no nulo en Android
- Android: Transparencia PNG fallando con BitmapFactory.decodeStream (...) y carpeta de activos
- BitmapFactory.decodeStream de Activos devuelve null en Android 7
Desde el código fuente de Lollipop puedo ver el tamaño de la imagen es 128dp, vea notification_template_material_big_media.xml en GitHub :
<!-- Layout to be used with only max 3 actions. It has a much larger picture at the left side--> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/status_bar_latest_event_content" android:layout_width="match_parent" android:layout_height="128dp" android:background="#00000000" android:tag="bigMediaNarrow" > <ImageView android:id="@+id/icon" android:layout_width="128dp" android:layout_height="128dp" android:scaleType="centerCrop" /> <!-- ...Nothing interesting for us futher... --> </RelativeLayout>
Esto es para el diseño ampliado con 3 o menos botones de acción. Mirando a Notification.MediaStyle.getBigLayoutResource (int) en GrepCode , si hay más botones parece notification_template_material_big_media.xml se utiliza:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/status_bar_latest_event_content" android:layout_width="match_parent" android:layout_height="128dp" android:background="#00000000" android:tag="bigMedia" > <include layout="@layout/notification_template_icon_group" android:layout_width="@dimen/notification_large_icon_width" android:layout_height="@dimen/notification_large_icon_height" /> <!-- ...Nothing interesting for us futher... --> </RelativeLayout>
Y notification_template_icon_group.xml se ve así:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:internal="http://schemas.android.com/apk/prv/res/android" android:layout_width="@dimen/notification_large_icon_width" android:layout_height="@dimen/notification_large_icon_height" android:id="@+id/icon_group" > <ImageView android:id="@+id/icon" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="12dp" android:layout_marginBottom="12dp" android:layout_marginStart="12dp" android:layout_marginEnd="12dp" android:scaleType="centerInside" /> <ImageView android:id="@+id/right_icon" android:layout_width="16dp" android:layout_height="16dp" android:padding="3dp" android:layout_gravity="end|bottom" android:scaleType="centerInside" android:visibility="gone" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" /> </FrameLayout>
Puedes encontrar notification_large_icon_width
y notification_large_icon_height
en … / res / values / dimens.xml :
<!-- The width of the big icons in notifications. --> <dimen name="notification_large_icon_width">64dp</dimen> <!-- The width of the big icons in notifications. --> <dimen name="notification_large_icon_height">64dp</dimen>
Así que la respuesta final – 128dp para el diseño ampliado con 3 o menos botones de acción y 64dp si hay más de 3.
- Almacenamiento de archivos en Android Database (Custom Content Provider) utilizando el campo _data – v1.6
- ¿Qué emuladores de dispositivos móviles usas para probar el desarrollo móvil?