50 votes

SplashScreen avec vecteur étiré en plein écran

J'ai fait de mon écran de démarrage avec ce tutoriel et il fonctionne très bien. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ Fondamentalement, j'ai mis en place un splascreen par thème:

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

Je voulais mettre une image de vecteur à 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 à travers la totalité de l'écran. Sur API 23 il fonctionne comme il doit avoir. Mais sur les appareils plus anciens, il vient de s'étire. J'ai essayé la largeur, la hauteur et même foiré avec les fenêtres, mais sans succès. Un correctif pour cela?

36voto

Airbagman Points 11

Je suis tombé sur le même problème. Malheureusement, il ne semble pas être une possibilité de faire de l'écran de démarrage de travail avec juste un vecteur dessiné pour le pré API 23.

Le problème est que vous ne pouvez pas charger VectorDrawableCompat à l'extérieur du processus, ce qui est le cas dans vos thèmes android:windowBackground. Donc, ce qui est probablement ce qui se passe ici est que sur des API 21 le Vecteur est converti en PNG pour être compatible. Ainsi, dans l' <layered-list>le convertir en PNG, est inséré dans l' <item> élément, ce qui provoque l'image bitmap à l'étirement de tous les bords, car il manque l' <bitmap> élément.

Donc ma solution est la suivante:

Créer un drawable_splashscreen.xml dans le dossier drawables-v23 qui ressemble à celui-ci pour le vecteur 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>

Ensuite créer un autre drawable_splashscreen.xml , mais à l'intérieur de l'ordinaire drawables le dossier

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

Avis de l' <bitmap> élément. Alors maintenant, quand le PNG est utilisé sur la pré API 23 appareils, il sera affiché correctement et de ne pas être étendu à l'ensemble de l'arrière-plan. Malheureusement, vous devez également fournir de l'écran de démarrage comme le format PNG pour que cela fonctionne dans l'ancienne Api. Mais pour tous les appareils avec l'API 23+ le vecteur dessinés sera utilisé.

L'espoir que j'ai cette réponse peut aider quelqu'un qui est en cours d'exécution dans la même question!

12voto

ℛɑƒæĿ Points 987

Pour le plein écran splash essayez d'utiliser:

android:gravity="fill_horizontal|fill_vertical"

Si pas résoudre peut-être que la solution est de créer des images séparées pour chaque taille de résolution.


La plupart des résolutions courantes:

  • Petite = 240 × 320px (ldpi)
  • Moyen = 320 x 480px (mdpi)
  • Grand = 480 x 800px (hdpi)
  • xLarge = 640 x 960 px (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 960 px (2 x mdpi)
  • xxhdpi = 960 x 1440px (3 x mdpi)
  • xxxhdpi = 1080 1920px x (4 x mdpi)

Format paysage (inversé format portrait):

  • 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 960 px (3 x mdpi)
  • xxxhdpi = 1920 x 1080px (4 x mdpi)

Plus sur vous pouvez trouver ici:

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

  2. Android image d'écran de démarrage tailles pour s'adapter à tous les appareils

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

2voto

Kirk Points 125

Je ne pense pas que ce soit possible de le faire avec des vecteurs, pour les appareils < API 23, car il n'est pas possible de définir les attributs android:la hauteur et android:largeur sur le drawable.

Pour mettre en œuvre mon écran de démarrage avec un centré sur l'icône, j'ai eu à l'exportation le vecteur de mon logo .png pour chaque taille de l'écran, et d'intégrer une image dans le calque-liste:

<?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 avoir des images bitmap dans mes ressources, mais au moins, l'écran de démarrage est le seul endroit où j'ai dû utiliser des bitmaps.

0voto

Avinash kumawat Points 348

Utilisez le bitmap et définissez votre image dans le src. Réglez 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>
 

écran de démarrage

-4voto

B Lin Points 318

Ne mettez pas votre image dans la fenêtre: fond (style.xml),

au lieu

ajouter une imageView dans un fichier de mise en page comme ceci,

   <ImageView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:src="@drawable/vector_najdiflet_logo"
      android:scaleType="centerCrop"/>
 

essayez de changer,

 android:scaleType="centerInside"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X