Gestión de diferentes resoluciones de pantalla para imágenes de fondo en Android

Mi aplicación de Android (un juego basado en texto) utiliza imágenes de fondo mucho para proporcionar un mejor ambiente visual. Por ejemplo, si la acción en el juego te lleva a una taberna, entonces obtienes una imagen de fondo de una taberna en el juego. Esta es una gran mejora, gráficamente, sobre el aburrido fondo negro que de otro modo se obtendría.

También es un problema, sin embargo, desde android: fondo siempre se extiende a las dimensiones de la pantalla. El resultado es que las imágenes de fondo se ven muy mal si el reproductor cambia entre el modo vertical y horizontal. Y para empeorar las cosas, muchos dispositivos tienen relaciones de aspecto muy diferentes (por ejemplo, 320×480 mdpi, 480×800 hdpi y 480×852 hdpi) y aún más variaciones están llegando.

¿Cómo resuelven los demás este problema? Tener imágenes individuales para las principales resoluciones / orientaciones no es una opción para mí, ya que esto daría lugar a la apk creciendo demasiado grande.

Te sugiero que obtengas el ancho y la altura de tu vista actual. Ahora mismo no estoy seguro de qué funciones le darán estos valores, pero estoy seguro de que es posible. Con eso se puede calcular una relación de aspecto. Me gustaría hacer las imágenes algo como 1000×1000 y sólo mostrar una cierta parte de la imagen, por lo que la relación de aspecto no será malo.
Tengo el mismo problema con la cámara. Así que mi solución fue elegir uno de los dos valores, anchura o altura, como fijo, y calcular el valor correcto de acuerdo con la relación de aspecto. No estoy seguro si hay funciones ya para mostrar sólo una parte de la imagen, pero estoy seguro de que podría escribir algo para copiar sólo una parte de la imagen y mostrar esa parte.

El inconveniente es, por supuesto, que va a mostrar sólo una parte del fondo. Dado que la relación de aspecto general de los teléfonos es, sin embargo, entre 1: 1.3 y 1: 1.8, supongo que no sería un problema demasiado grande. Yo preferiría ver la parte de una imagen de la manera correcta, que mirar una imagen estirada fea.

El primer paso es obtener la altura de la pantalla y el ancho del dispositivo en sí, luego estirar / reducir o pad su mapa de bits según sea necesario. Esta respuesta tiene una fuente que debe ayudar, copiado a continuación. Props a Josef para la respuesta original.

Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

Aquí hay una fuente genérica para obtener la orientación.

 int orientation = display.getOrientation(); 

O alguna fuente más involucrada desde aquí (un poco desordenado pero parece correcto).

 public int getscrOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); // Sometimes you may get undefined orientation Value is 0 // simple logic solves the problem compare the screen // X,Y Co-ordinates and determine the Orientation in such cases if(orientation==Configuration.ORIENTATION_UNDEFINED){ Configuration config = getResources().getConfiguration(); orientation = config.orientation; if(orientation==Configuration.ORIENTATION_UNDEFINED){ //if height and widht of screen are equal then // it is square orientation if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; }else{ //if widht is less than height than it is portrait if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else{ // if it is not any of the above it will defineitly be landscape orientation = Configuration.ORIENTATION_LANDSCAPE; } } } } return orientation; // return value 1 is portrait and 2 is Landscape Mode } 

Tal vez usted podría crear sus imágenes de fondo como imágenes NinePatch para que usted está en mejor control de cómo se extiende? http://developer.android.com/guide/developing/tools/draw9patch.html http://www.developer.com/ws/other/article.php/3889086/Working-with-NinePatch-Stretchable-Graphics-in -Android.htm

De lo contrario, puede evitar que las imágenes se estiren (o al menos mantener la relación de aspecto correcta) estableciendo el atributo scaleType, por ejemplo, android:scaleType="center" . http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.