144 votes

Android : Mettre à l'échelle un Drawable ou une image de fond ?

Sur une mise en page, je souhaite mettre à l'échelle l'image d'arrière-plan (en conservant son rapport d'aspect) pour qu'elle corresponde à l'espace alloué lors de la création de la page. Quelqu'un a-t-il une idée de la manière de procéder ?

J'utilise layout.setBackgroundDrawable() et un BitmapDrawable() pour fixer gravity pour le découpage et le remplissage, mais je ne vois aucune option pour la mise à l'échelle.

94voto

Aliaksei N. Points 1678

Pour personnaliser l'échelle de l'image de fond, créez une ressource comme ceci :

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

Il sera alors centré dans la vue s'il est utilisé comme arrière-plan. Il existe également d'autres drapeaux : http://developer.Android.com/guide/topics/resources/drawable-resource.html

57voto

dweebo Points 1029

Je n'ai pas essayé de faire exactement ce que vous voulez, mais vous pouvez mettre à l'échelle une ImageView en utilisant android:scaleType="fitXY"
et il sera dimensionné pour s'adapter à la taille que vous donnez à l'ImageView.

Vous pouvez donc créer un FrameLayout pour votre mise en page, y placer l'ImageView, puis tout autre contenu dont vous avez besoin dans le FrameLayout, ainsi qu'un arrière-plan transparent.

<FrameLayout  
android:layout_width="fill_parent" android:layout_height="fill_parent">

  <ImageView 
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:src="@drawable/back" android:scaleType="fitXY" />

  <LinearLayout>your views</LinearLayout>
</FrameLayout>

40voto

Ionut Negru Points 570

Il existe un moyen simple de le faire à partir du dessinable :

votre_drawable.xml

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

    <item android:drawable="@color/bg_color"/>
    <item>
        <bitmap
            android:gravity="center|bottom|clip_vertical"
            android:src="@drawable/your_image" />
    </item>

</layer-list>

Le seul inconvénient est que s'il n'y a pas assez d'espace, votre image ne sera pas entièrement affichée, mais elle sera coupée, je n'ai pas trouvé de moyen de faire cela directement à partir d'un drawable. Je n'ai pas trouvé de moyen de le faire directement à partir d'un drawable. Mais d'après les tests que j'ai effectués, cela fonctionne plutôt bien, et cela n'écrête pas trop l'image. Vous pouvez jouer davantage avec les options de gravité.

Une autre façon de procéder consiste à créer une mise en page, dans laquelle vous utiliserez une balise ImageView et définir les scaleType a fitCenter .

22voto

konopko Points 144

Utilisez l'image comme fond d'écran dimensionné pour la mise en page :

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imgPlaylistItemBg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:maxHeight="0dp"
        android:scaleType="fitXY"
        android:src="@drawable/img_dsh" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

    </LinearLayout>

</FrameLayout>

19voto

Anke Points 4060

Pour conserver le ratio d'aspect, vous devez utiliser android:scaleType=fitCenter o fitStart etc. Utilisation de fitXY ne conservera pas le rapport d'aspect original de l'image !

Notez que cela ne fonctionne que pour les images avec un src mais pas pour l'image de fond.

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