web-dev-qa-db-fra.com

Comment obtenir la largeur et la hauteur d'une vue d'image dans Android?

Dans mon code, j'ai un Image View dans ma mise en page XML et je continue à changer l'image source pour cela dans mon code. Maintenant, je veux connaître la largeur et la hauteur de l'image générée à chaque fois.

J'ai essayé d'utiliser getWidth(), getHeight(),getMeasuredWidth(), et getMeasuredHeight(), mais ils renvoient tous 0.

Comment puis-je l'obtenir?

16
Ankit

Où appelez-vous getWidth() et getHeight() sur ImageView? Si vous appelez depuis onCreate() en activité, cela ne fonctionnera pas. Vous devez attendre que la fenêtre d'activité soit attachée, puis appelez getWidth() and getHeight() sur ImageView. Vous pouvez essayer d’appeler la méthode getWidth() and getHeight() à partir de onWindowFocusChanged() de votre activité.

@Override
public void onWindowFocusChanged(boolean hasFocus){
    int width=imageView.getWidth();
    int height=imageView.getHeight();
}
42
Veer

essaye ça

 ImageView iv=(ImageView)findViewById(R.id.image);
 ViewTreeObserver vto = iv.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        public boolean onPreDraw() {
           finalHeight = iv.getMeasuredHeight();
           finalWidth = iv.getMeasuredWidth();
           Log.e("hilength","Height: " + finalHeight + " Width: " + finalWidth);
            return true;
        }
    });
14
Khan

essayez ce code 

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;
    }
});

ça marche vraiment ...

4
Ravi Makvana

si vous définissez ImageView comme dessinable et que le type de hauteur et de largeur de ImageView est WRAP_CONTENT, vous pouvez obtenir la hauteur et la largeur de ImageView par ce même si vous appelez depuis onCreate()

int height = imageView.getDrawable().getIntrinsicHeight();
int width = imageView.getDrawable().getIntrinsicWidth();
4
canaanhhh

La façon dont vous faites référence à l'objet image est fausse. C'est pourquoi on vous donne zéro tout le temps. commencez par créer un objet bitmap à partir de imageview et obtenez-en la largeur et la hauteur.

Quand je prends une image de cam je fais ce qui suit et ça marche à merveille.

Bitmap image2 = (Bitmap) data1.getExtras().get("data");
double width = Double.valueOf(image2.getWidth());
Log.v("WIDTH", String.valueOf(width));
double height = Double.valueOf(image2.getHeight());
Log.v("height", String.valueOf(height));

J'espère que cela vous aidera. 

1
Jay Mayu

Vous devez d’abord convertir l’image en mutablebitmap et essayer d’obtenir la largeur et la hauteur de l’image, ce qui résoudra le problème.

    Bitmap Rbitmap = Bitmap.createBitmap(bitmap).copy(
                    Config.ARGB_4444, true);

Rbitmap.getWidth();
Rbitmap.getheight();
1
Sreedev R

Essayez cette solution:

Bitmap bitmap = ((BitmapDrawable)imageView.getBackground()).getBitmap();
int width = bitmap.getWidth();
int height = bitmap.getHeight();
1
Yogesh Rathi