2012-05-02 5 views
15

Dans mon code, j'ai un Image View dans ma mise en page XML et je continue de 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.Comment obtenir la largeur et la hauteur d'une vue d'image dans android?

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

Comment puis-je obtenir?

Répondre

40

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

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

qui renvoie zéro la première fois que l'image est chargée, puis la taille correcte à chaque fois après que .. – Odaym

+3

Comment fait-on cela dans un fragment? –

+0

onWindowFocusChanged juste travailler sur API18 et plus, et il ne peut pas être le meilleur moyen ... cependant merci –

1

La façon dont vous faites référence à l'objet image est erronée. C'est pourquoi on vous donne tout le temps zéro. d'abord créer un objet bitmap à partir d'imageview et obtenir la largeur et la hauteur de celui-ci.

Lorsque vous prenez une image de la came, je fais ce qui suit et ça fonctionne comme un charme.

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

Espérons que cela aide pour vous.

14

essayer

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

merci beaucoup. ce code fonctionne aussi, mais je suppose que la solution fournie par Veer sera plus appropriée. – Ankit

1

D'abord, vous devez convertir l'image en mutablebitmap et essayer d'obtenir la largeur et la hauteur de l'image et la plupart du temps cela va résoudre votre problème ..

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

Rbitmap.getWidth(); 
Rbitmap.getheight(); 
+1

La question est de savoir comment obtenir hauteur et largeur de la vue de l'image pas un bitmap. –

4

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

il est vraiment travailler ...

1

Essayez cette solution:

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

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

int height = imageView.getDrawable().getIntrinsicHeight(); 
int width = imageView.getDrawable().getIntrinsicWidth(); 
Questions connexes