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).

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.

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.

  • La imagen de la galería gira automáticamente - Android
  • Asignación de mapa de bits, utilizando BitmapFactory.Options.inBitmap arroja IllegalArgumentException
  • Java.lang.OutOfMemoryError en android.graphics.BitmapFactory.decodeResource (BitmapFactory.java:374)
  • ¿Cómo puedo especificar el formato de mapa de bits (por ejemplo, RGBA_8888) con BitmapFactory.decode * ()?
  • ¿Cómo puedo imprimir una imagen en una impresora Bluetooth en Android?
  • Xamarin forma la imagen de Android no se está comprimiendo
  • Obtener el tamaño de Bitmap Android
  • Bitmap.compress (Bitmap.CompressFormat.PNG, 0, fOut) haciendo que el tamaño de la imagen sea mayor que el original
  • Android - calculateInSampleSize, ¿por qué Math.round se ocupa de height (height / reqHeight) cuando width> height?
  • Descodificación de Base64 para image / jpeg; base64 en android
  • No se puede resolver el símbolo BitmapFactory.decodeResource en InteliJ
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.