Comment obtenir la largeur et la hauteur d'un android.widget.ImageView?

╔══════════════════════════════════════════════╗   ^
║ ImageView    ╔══════════════╗                ║   |
║              ║              ║                ║   |
║              ║ Actual image ║                ║   |
║              ║              ║                ║   |60px height of ImageView
║              ║              ║                ║   |
║              ║              ║                ║   |
║              ╚══════════════╝                ║   |
╚══════════════════════════════════════════════╝   
<------------------------------------------------>
                   90px width of ImageView

J'ai une vue d'image avec une hauteur et une largeur par défaut, les images sont stockées dans db et je veux mettre à l'échelle L'Image en fonction de la largeur de la hauteur Imageview. Comme je ne le veux pas donner des valeurs par défaut parce que chaque fois que je change sa hauteur et sa largeur, je dois aussi le changer dans le code.

J'essaie d'obtenir la hauteur et la largeur de ImageView mais 0 m'est retourné dans les deux cas.

int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();

Cela me renvoie 0 même s'il a une hauteur et une largeur par défaut

260
demandé sur einverne 2011-01-13 16:21:27

10 réponses

Ma réponse sur cette question peut vous aider à:

int finalHeight, finalWidth;
final ImageView iv = (ImageView)findViewById(R.id.scaled_image);
final TextView tv = (TextView)findViewById(R.id.size_label);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
        iv.getViewTreeObserver().removeOnPreDrawListener(this);
        finalHeight = iv.getMeasuredHeight();
        finalWidth = iv.getMeasuredWidth();
        tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
        return true;
    }
});

Vous pouvez ensuite ajouter votre travail de mise à l'échelle de l'image à partir de la méthode onPreDraw ().

207
répondu kcoppock 2017-05-23 12:03:05

Je viens de définir cette propriété et maintenant Android OS s'occupe de tout.

Android: adjustViewBounds= "true"

Utilisez ceci dans votre mise en page.xml où vous avez planté votre ImageView: d

25
répondu AZ_ 2014-09-09 02:37:27

Je pourrais obtenir la largeur et la hauteur de l'image par son drawable;

int width = imgView.getDrawable().getIntrinsicWidth();
int height = imgView.getDrawable().getIntrinsicHeight();
17
répondu Rashid 2016-08-08 07:25:03

La raison pour laquelle les dimensions de L'ImageView sont 0 est que lorsque vous les interrogez, la vue n'a toujours pas effectué les étapes de mise en page et de mesure. Vous avez seulement dit à la vue comment elle se "comporterait" dans la mise en page, mais elle n'a toujours pas calculé où mettre chaque vue.

Comment décidez-vous de la taille à donner à la vue de l'image? Ne pouvez-vous pas simplement utiliser l'une des options de mise à l'échelle implémentées nativement?

13
répondu Pedro Loureiro 2011-01-18 00:19:17

Poster sur le thread de L'interface utilisateur fonctionne pour moi.

final ImageView iv = (ImageView)findViewById(R.id.scaled_image);

iv.post(new Runnable() {
            @Override
            public void run() {
                int width = iv.getMeasuredWidth();
                int height = iv.getMeasuredHeight();

            }
});
9
répondu element6 2015-02-22 05:06:46

Je pense que vous pouvez laisser le système D'exploitation Android prendre soin de cela pour vous. Définissez le type d'échelle sur ImageView sur fitXY et l'image qu'il affiche sera dimensionnée pour s'adapter à la taille actuelle de la vue.

<ImageView 
    android:layout_width="90px" 
    android:layout_height="60px"
    android:scaleType="fitXY" />
4
répondu Ian Leslie 2011-01-13 13:43:17

Votre fichier xml :

 <ImageView android:id="@+id/imageView"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/image"
               android:scaleType="fitXY"
               android:adjustViewBounds="true"/>

Votre fichier java:

ImageView imageView = (ImageView)findViewById(R.id.imageView);
     int width = imageView.getDrawable().getIntrinsicWidth();
     int   height = imageView.getDrawable().getIntrinsicHeight();
4
répondu omor 2017-06-13 09:20:00

Le moyen le plus simple est d'obtenir la largeur et la hauteur D'une ImageView dans la méthode onWindowFocusChanged de l'activité

 @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    height = mImageView.getHeight();
    width = mImageView.getWidth();

}
2
répondu Aqib 2014-12-26 11:11:57

Si vous avez créé plusieurs images dynamiquement que d'essayer celui-ci:

// initialisez votre tableau d'images

private ImageView myImages[] = new ImageView[your_array_length];

// créer par programmation et ajoutez à la vue parent

 for (int i = 0; i < your_array_length; i++) {
                myImages[i] = new ImageView(this);
                myImages[i].setId(i + 1);
                myImages[i].setBackgroundResource(your_array[i]);
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        frontWidth[i], frontHeight[i]);
                ((MarginLayoutParams) params).setMargins(frontX_axis[i],
                        frontY_axis[i], 0, 0);
                myImages[i].setAdjustViewBounds(true);
                myImages[i].setLayoutParams(params);

                if (getIntent() != null && i != your_array,length) {
                    final int j = i;
                    myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                        public boolean onPreDraw() {
                            myImages[j].getViewTreeObserver().removeOnPreDrawListener(this);
                    finalHeight = myImages[j].getMeasuredHeight();
                        finalWidth = myImages[j].getMeasuredWidth();
                    your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth);
                            return true;
                        }
                    });
                }
                your_parent_layout.addView(myImages[i], params);
            }

/ / C'est tout. Heureux De Codage.

1
répondu Hiren Patel 2014-11-06 06:14:07

Mon ami par ce u n'obtient pas la hauteur de l'image stockée dans db.mais vous obtenez une hauteur de vue.pour obtenir la hauteur de l'image, vous devez créer bitmap à partir de db, S image.et que vous pouvez récupérer la hauteur et la largeur de imageview

-2
répondu chikka.anddev 2011-01-13 13:24:55