2012-05-02 8 views
15

In meinem Code habe ich eine Image View in meinem XML-Layout und ich ändere das Quellbild dafür in meinem Code. Jetzt möchte ich die Breite und Höhe des generierten Bildes jedes Mal wissen.Wie bekomme ich die Breite und Höhe einer Bildansicht in Android?

ich getWidth() versucht, mit, getHeight(),getMeasuredWidth(), und getMeasuredHeight(), aber sie alle zurückkehren 0.

Wie kann ich diese bekommen?

Antwort

40

Wo rufen Sie getWidth() und getHeight() auf ImageView? Wenn Sie von onCreate() in Aktivität aufrufen, wird es nicht funktionieren. Sie müssen darauf warten, dass das Aktivitätsfenster angefügt wird, und dann getWidth() and getHeight() auf ImageView aufrufen. Sie können versuchen, getWidth() and getHeight() von onWindowFocusChanged() Methode Ihrer Aktivität aufrufen.

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

, die Null beim ersten Mal, dass das Bild geladen wird, und dann die richtige Größe jedes Mal danach zurückgibt. – Odaym

+3

Wie macht man das in einem Fragment? –

+0

onWindowFocusChanged nur auf API18 und über, und es kann nicht der beste Weg sein ... aber danke –

1

Die Art, wie Sie Bezug auf das Bildobjekt machen, ist falsch. Deshalb erhältst du die ganze Zeit Null. Erstellen Sie zuerst ein Bitmap-Objekt aus der Bildansicht und ermitteln Sie daraus die Breite und Höhe.

Wenn ich ein Bild von Cam gemacht habe, mache ich folgendes und es funktioniert wie ein 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)); 

Ich hoffe, es hilft für Sie.

14

versuchen, diese

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

vielen Dank. Dieser Code funktioniert auch, aber ich denke, dass die von Veer zur Verfügung gestellte Lösung angemessener ist. – Ankit

1

Zuerst das Bild konvertieren müssen mutablebitmap und die versuchen, die Breite und Höhe des Bildes zu erhalten und vor allem wird Ihr Problem lösen ..

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

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

Die Frage ist, wie Höhe und Breite der Bildansicht nicht eine Bitmap erhalten. –

4

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

es wirklich funktioniert ...

1

diese Lösung Versuchen:

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

, wenn Sie Image eine ziehbar gesetzt und die Höhe des Image und width type ist WRAP_CONTENT, Sie können die Höhe und Breite von ImageView selbst dann aufrufen, wenn Sie vonanrufen

int height = imageView.getDrawable().getIntrinsicHeight(); 
int width = imageView.getDrawable().getIntrinsicWidth(); 
Verwandte Themen