2012-09-26 65 views
15

Estoy usando el siguiente estilo para mostrar una pantalla de bienvenida para una aplicación de Android escrita en MonoDroid. Sin embargo, parece tomar la imagen y maximizarla para que se ajuste a toda la pantalla a la vez que arruina la relación de aspecto. Por lo tanto, la imagen se ve enorme y horrible.Mostrar imagen de la pantalla de bienvenida con ajuste automático

¿Hay alguna forma de maximizarlo pero manteniendo la relación de aspecto para que luzca bien?

<style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/splashscreenimage</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

Esta es la actividad en C# que crea la pantalla de inicio y va al inicio de sesión.

[Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)] 
    public class SplashScreenActivity : Activity 
    { 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Start our real activity 
     StartActivity(typeof(LoginActivity)); 
    } 
    } 
+0

Tenga una mirada en esta [post] (http://stackoverflow.com/questions/2521959/how-to-scale-an-image-in-imageview-to-keep-the-aspect-ratio), es un problema similar. – Michael

+0

que utiliza una vista de imagen. Esto es estrictamente el fondo de la ventana. En MonoDroid hay una segunda o dos pausas mientras se carga el entorno. Quería mostrar una pantalla de bienvenida durante esa pausa. – Telavian

Respuesta

25

Existen varios tipos de dispositivos arrastrables en Android, incluidos mapas de bits reales, nueve parches y archivos XML. Intente envolver su archivo de imagen con un archivo XML que le dé atributos y luego use el archivo XML como dibujable en lugar de la imagen de origen.

Supongamos que el archivo XML se llama scaled_background y la imagen original es simplemente background.png:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
android:gravity="center" 
android:src="@drawable/background" /> 

En lugar de establecer el fondo para hacer referencia @drawable/background lo haces con él para hacer referencia al archivo XML: @drawable/scaled_background en este ejemplo. Los detalles sobre los modos de escala se mencionan en el Drawable documentation.

+0

mientras esto funciona al no estirar la imagen, en las tabletas tengo espacios vacíos alrededor de mi imagen de bienvenida. ¿Es posible hacer un fondo de color debajo del 'android: src =" @ dibujable/fondo "' en ese archivo xml? – lxknvlk

+3

seguro, use la lista de capas :) ' ' –

3

Parece tomar la imagen y maximizarla para que se ajuste a toda la pantalla mientras se arruina la relación de aspecto. Por lo tanto, la imagen se ve enorme y horrible.

¿Hay alguna manera de maximizarlo pero manteniendo la relación de aspecto así que todavía se ve bien?

La razón por la imagen se agranda es porque la imagen que utiliza tiene píxeles superiores que la resolución de la pantalla del dispositivo que se está probando la aplicación. Para resolver esto, el mejor método es la creación de imágenes de adecuada tamaño (píxeles) para pantalla de dispositivo diferente y luego ponerlos en dibujables archivos (drawable-ldpi, drawable-mdpi, drawable-hdpi, etc.) en consecuencia.

siguiente es una lista de tamaño de pantalla mínima para varias pantallas como proporcionado por Google (todo en píxeles): -


para dispositivos Android Mobile

LDPI- 426 x 320

MDPI- 470 x 320

HDPI- 640 x 480

XHDPI- 960 x 720


para dispositivos Android Tablet

LDPI- 200 x 320

MDPI- 320 x 480

HDPI- 480 x 800

XHDPI- 720 x 1280


Ahora crear un XML dibujable en res/estirable que proporcionará fondo de la actividad de bienvenida en el tema (Theme.Splash) usando layer-list. La imagen se carga en <bitmap> y es centro alineado utilizando el atributo de gravedad .

<!-- background_splash.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:drawable="@color/gray"/> 

    <item> 
     <bitmap 
      android:gravity="center" 
      android:src="@drawable/splashscreenimage"/> 
    </item> 

</layer-list> 

Ahora modifique su estilo (Theme.Splash) y establecer background_splash.xml como fondo de su actividad salpicaduras en el tema.

<style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/background_splash.xml</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

Con eso, la imagen se debe establecer en el centro con relación de aspecto mantenido.

Nota: Para cambiar el tamaño de la imagen, puede usar Adobe Photoshop (me resulta más fácil trabajar con ella). Deberá realizar un poco de experimentación para obtener el tamaño de imagen correcto que desea para la pantalla de inicio.

De preferencia, también puede usar 9 Imagen de parche para que el borde de la imagen pueda estirarse para ajustarse al tamaño de la pantalla sin afectar el área estática de la imagen.


Enlaces de referencia:

Edificio Splash Screen: https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

Splash tamaños de imagen en pantalla: android splash screen sizes for ldpi,mdpi, hdpi, xhdpi displays ? - eg : 1024X768 pixels for ldpi

Cuestiones relacionadas