web-dev-qa-db-fra.com

Afficher l'image de l'écran de démarrage avec ajustement automatique

J'utilise le style suivant pour afficher un écran de démarrage pour une application Android écrite en MonoDroid. Cependant, il semble prendre l'image et l'agrandir pour l'adapter à tout l'écran tout en gâchant le rapport d'aspect) Ainsi, l'image semble énorme et horrible.

Existe-t-il un moyen de l'optimiser, mais de conserver le rapport hauteur/largeur de sorte qu'il semble toujours bon?

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

C'est l'activité en C # qui crée l'écran de démarrage et va à la connexion.

  [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));
    }
  }
24
Telavian

Il existe plusieurs types de drawables dans Android, y compris les bitmaps réels, les fichiers à neuf patchs et les fichiers XML. Essayez d'encapsuler votre fichier image avec un fichier XML qui lui donne des attributs, puis utilisez le fichier XML comme dessinable au lieu de l'image source.

Supposons que votre fichier xml s'appelle scaled_background et que votre image d'origine soit simplement 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" />

Au lieu de définir votre arrière-plan comme référence @drawable/background vous le définiriez pour référencer le fichier XML: @drawable/scaled_background dans cet exemple. Les détails sur les modes de mise à l'échelle sont mentionnés dans la Documentation Drawable .

32
profexorgeek

Il semble prendre l'image et l'agrandir pour l'adapter à tout l'écran tout en gâchant le rapport d'aspect. Ainsi, l'image semble énorme et horrible.

Existe-t-il un moyen de l'optimiser, mais de conserver le rapport hauteur/largeur de sorte qu'il semble toujours bon?

La raison pour laquelle l'image est agrandie est que l'image que vous utilisez a des pixels plus élevés que la résolution de l'écran de l'appareil dans lequel vous testez l'application. Pour résoudre ce problème , la meilleure méthode consiste à créer des images de taille appropriée (pixels) pour écran de périphérique différent , puis à les placer dans fichiers drawable (drawable-ldpi, drawable-mdpi, drawable-hdpi, etc.) en conséquence.

Voici une liste de taille d'écran minimale pour divers affichages fournis par Google (tous en pixels): -


Pour Appareils mobiles Android

LDPI- 426 x 320

MDPI- 470 x 320

HDPI - 640 x 480

XHDPI- 960 x 720


Pour les tablettes Android

LDPI- 200 x 320

MDPI - 320 x 480

HDPI - 480 x 800

XHDPI- 720 x 1280


Créez maintenant un dessinable XML dans res/drawable qui fournira l'arrière-plan de l'activité de démarrage dans le thème (Theme.Splash) en utilisant layer-list. L'image est chargée dans <bitmap> et est au centre aligné à l'aide de l'attribut gravity.

<!-- 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>

Modifiez maintenant votre style (Theme.Splash) et définissez background_splash.xml comme background de votre activité de démarrage dans le thème.

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

Avec cela, l'image doit être réglée au centre avec un rapport d'aspect maintenu.

Remarque: Pour le redimensionnement d'image, vous pouvez utiliser Adobe Photoshop (je trouve plus facile de travailler avec). Un peu d'expérimentation devra être fait pour obtenir la taille d'image correcte que vous souhaitez pour l'écran de démarrage.

Selon vos préférences, vous pouvez également utiliser 9 Patch image afin que la bordure de l'image puisse s'étirer pour s'adapter à la taille de l'écran sans affecter la zone statique du image.


Liens de référence:

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

Tailles d'image de l'écran de démarrage:Tailles de l'écran de démarrage Android pour les affichages ldpi, mdpi, hdpi, xhdpi? - par exemple: 1024X768 pixels pour ldpi

7
Kaushik NP