web-dev-qa-db-fra.com

SplashScreen with Vector étiré en plein écran

J'ai fait mon écran de démarrage avec ce tutoriel et cela fonctionne très bien. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ En gros, j'ai créé un écran de démarrage par thème

   <style name="ThemeSplash" parent="Theme.AppCompat.NoActionBar">
        <item name="Android:windowBackground">@drawable/drawable_splashcreen</item>
    </style>

Je voulais mettre une image vectorielle à l'intérieur comme ceci:

(drawable_splashcreen)

<item Android:drawable="@color/color_background_splash_screen" />

<item
    Android:drawable="@drawable/vector_najdiflet_logo"

    />

L'image sera étirée en plein écran. Sur l'API 23, cela fonctionne comme il se doit. Mais sur les appareils plus anciens, cela ne fait que s'étirer. J'ai essayé la largeur, la hauteur et j'ai même gâché les fenêtres, mais sans succès. Une solution pour cela?

29
WinterChilly

Pour utiliser Splash en plein écran, essayez d’utiliser:

Android:gravity="fill_horizontal|fill_vertical"

Si ce n’est pas le cas, la solution peut être de créer des images séparées. pour chaque taille de résolution.


Résolutions les plus courantes:

  • Petit = 240 x 320px (ldpi)
  • Moyenne = 320 x 480px (mdpi)
  • Grand = 480 x 800px (hdpi)
  • xLarge = 640 x 960px (xhdpi)

Format portrait:

  • ldpi = 240 x 360px (0,75 x mdpi)
  • mdpi = 320 x 480px (densité de base) 
  • hdpi = 480 x 720px (1,5 x mdpi)
  • xhdpi = 640 x 960px (2 x mdpi)
  • xxhdpi = 960 x 1440px (3 x mdpi)
  • xxxhdpi = 1080 x 1920px (4 x mdpi)

Format paysage (format portrait inversé):

  • ldpi = 360 x 240px (0,75 x mdpi)
  • mdpi = 480 x 320px (densité de base) 
  • hdpi = 720 x 480px (1,5 x mdpi)
  • xhdpi = 960 x 640px (2 x mdpi)
  • xxhdpi = 1440 x 960px (3 x mdpi)
  • xxxhdpi = 1920 x 1080px (4 x mdpi)

Plus d'informations sur vous pouvez trouver ici:

  1. https://design.google.com/devices/

  2. La taille des images d'écran de démarrage Android convient à tous les appareils

  3. http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

8
ℛɑƒæĿ

Je suis tombé par hasard sur le même problème . Malheureusement, il ne semble pas y avoir de possibilité de faire fonctionner l’écran de démarrage avec juste un vecteur dessinable pour la pré API 23.

Le problème est que vous ne pouvez pas charger VectorDrawableCompat en dehors du processus, comme dans ce cas dans vos thèmes Android: windowBackground. Donc, ce qui se passe probablement ici, c'est que sur l'API 21, le vecteur est converti en un fichier PNG pour être compatible. Ainsi, dans le <layered-list>, le PNG converti est inséré dans l'élément <item>, ce qui entraîne l'étirement de l'image bitmap sur tous les bords, car l'élément <bitmap> manque.

Donc ma solution est la suivante: 

Créez un drawable_splashscreen.xml dans le dossier drawables-v23 qui ressemble au suivant pour le vecteur pouvant être dessiné

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:opacity="opaque">

    <item Android:drawable="?attr/colorPrimary"/>

    <item Android:drawable="@drawable/ic_splashscreen" Android:gravity="center"/>

</layer-list>

Puis créez un autre drawable_splashscreen.xml mais dans le dossier drawables normal

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:opacity="opaque">

    <item Android:drawable="?attr/colorPrimary"/>

    <item>
        <bitmap Android:drawable="@drawable/ic_splashscreen" Android:gravity="center"/>
    </item>

</layer-list>

Notez l'élément <bitmap>. Alors maintenant, lorsque le PNG est utilisé sur des périphériques pré-API 23, il s’affiche correctement et ne tend pas à s’étirer sur tout l’arrière-plan. Malheureusement, vous devez également fournir un écran de démarrage au format PNG pour que cela fonctionne dans les anciennes API. Mais pour chaque appareil avec API 23+, le vecteur dessinable sera utilisé.

J'espère que cette réponse pourra aider quelqu'un qui court dans le même dossier!

1
Airbagman

Utilisez bitmap et définissez votre image dans le src. Mettre la gravité au centre

    <?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:opacity="opaque">

    <item Android:drawable="@color/color_background_splash_screen"/>
    <item>
        <bitmap
            Android:gravity="center"
            Android:src="@drawable/ic_logo_splash"/>
    </item>
</layer-list>

 splash screen

0
Avinash kumawat

Je ne pense pas que cela soit possible avec des vecteurs, pour les appareils <API 23, car il n'est pas possible de définir les attributs Android: height et Android: width sur le dessin.

Pour implémenter mon écran de démarrage avec une icône centrée, je devais exporter le vecteur de mon logo au format .png pour chaque taille d'écran et intégrer un bitmap dans la liste des calques:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:opacity="opaque">
    <item Android:drawable="@drawable/splash_screen_background" />

    <item
        Android:left="20dp"
        Android:right="20dp">
        <bitmap
            Android:gravity="center"
            Android:scaleType="centerInside"
            Android:src="@drawable/logo_rasterised" />
    </item>

</layer-list>

Idéalement, je ne voudrais pas du tout avoir d'images bitmap dans mes ressources, mais au moins l'écran de démarrage est le seul endroit où j'ai dû utiliser des images bitmap.

0
Kirk