Aller au contenu

Image qui change de taille


Hervéé

Recommended Posts

Bonjour,

J'ai fait une petite appli dans laquelle je présente des images.

Malheureusement il apparait que ces images n'ont pas toujours la même taille selon le téléphone. Pourtant, les téléphones sont tous en andro 2.1.

Sur un xperia x10, elles apparraissent toutes petites. Sur un Acer E120, en grand.

Voici mon code :

        	ImageView ima;
       	RelativeLayout.LayoutParams param3;
       	String voiesursiteweb;

           ima = new ImageView(this);
           ima.setId(30);
           InputStream is = getAssets().open(voieImageDansAssets);
           ima.setImageDrawable(new BitmapDrawable(is));
           is.close();
        param3 = new RelativeLayout.LayoutParams(
        		150, 
        		150);
        param3.addRule(RelativeLayout.BELOW, 20);
        ima.setLayoutParams(param3);
        layout.addView(ima); // layout est un RelativeLayout.

Comment faire pour que l'image ait toujours la même taille ou à peu près ?

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Plusieurs solutions :

  • Donner une taille a tes images en "dp" ou "sp"
  • En fonction du type d'image tu peux aussi définir les points étirables d'une image (9.png)
  • Créer la même image avec des dimensions différentes et la placer dans le bon répertoire en fonction de la densité des écrans (utilisation transparente dans le code) - 4 répertoires à prévoir (ldpi, mdpi, hdpi, xhdpi)

Tu trouveras ton bonheur : ici

Jok

Lien vers le commentaire
Partager sur d’autres sites

Ou méthode un peu crade mais je la donne quand même:

Récupérer la taille de ton écran et redimensionné en fonction de celle ci grâce à :

WindowManager manager= (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display ecran =  manager.getDefaultDisplay(); 

Mais personnellement, je te conseil d'utiliser les dip.

Lien vers le commentaire
Partager sur d’autres sites

Excusez je tombe un peu des nues (qqfois bien agréables d'ailleurs), mais j'imaginais naïvement que mon image allait prendre sa propre taille, limitée par param3 = new RelativeLayout.LayoutParams(150, 150) (que j'espérais que ça allait provoquer la limitation à 150x150) (150 quoi, j'en sais rien, mais au moins limité).

Quelle est mon erreur de raisonnement là dedans ?

Par ailleurs, je n'ai pas une ou deux malheureuses images à présenter, mais plusieurs dizaines sorties d'une base de données, et que je dois donc traiter automatiquement. Existe-t-il un moyen pour les rendre étirables automatiquement ? Ou pour les adapter à une largeur d'écran automatiquement ? (même par un programme externe qui les placerait dans le res/layout correct).

Merci pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

En gros :

1 - Soit dans le manifest : android:anyDensity="false"

Et tu peux utiliser les px (pixel) pour définir les tailles mais tu laisses le système gérer les étirements.

2 - Soit dans le manifest : android:anyDensity="true"

Et tu utilises les dp et sp pour scaler toi même indépendamment de la densité des écrans

Dans la doc officiel de LayoutParam : fixed size in pixels

Donc cette manière de faire utilise obligatoirement des pixels visiblement.

Donc juste en mettant android:anyDensity="false" dans le manifest cela répondra à ton besoin

J'avoue que personnellement je marche en anyDensity=true et dip/sip donc je ne connais pas bien l'effet 'pixel' ^^.

Une autre solution à ton problème :

android:anyDensity="true" à mettre dans le manifest puis

Tu définis un XML avec juste un ImageView (ton pattern)

<ImageView android:id="@+id/my_img"
              android:layout_width="150dp"
              android:layout_height="150dp"/>

Tu récupères le tout en :

LayoutInflater mInflater = LayoutInflater.from(this.getApplicationContext());
ImageView v = mInflater.inflate(R.layout.my_img, null);

Voilà après tu fait ce que tu veux sur le v préformaté en 150x150

J'espère pas t'avoir noyé,

Jok

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...