45 votes

Comment obtenir les dimensions d'un dessin dans une image?

Quelle est la meilleure façon de récupérer les dimensions de la Drawable dans une ImageView?

Mon ImageView a un Init-Méthode où j'ai créer l'ImageView:

private void init() {
    coverImg = new ImageView(context);
    coverImg.setScaleType(ScaleType.FIT_START);
    coverImg.setImageDrawable(getResources().getDrawable(R.drawable.store_blind_cover));
    addView(coverImg);
}

À un certain moment au cours de la mise en page oder mesurer le processus j'ai besoin de la dimension exacte de la Drawable pour régler le reste de mes Composants autour d'elle.

coverImg.getHeight() et coverImg.getMeasuredHeight() ne renvoie pas les résultats que j'ai besoin et si j'utilise coverImg.getDrawable().getBounds() - je obtenir les dimensions avant il a été réduit par l'ImageView.

Merci pour votre aide!

53voto

kcoppock Points 57219

Je viens d'essayer ça et ça marche pour moi:

 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() {
        // Remove after the first run so it doesn't fire forever
        iv.getViewTreeObserver().removeOnPreDrawListener(this);
        finalHeight = iv.getMeasuredHeight();
        finalWidth = iv.getMeasuredWidth();
        tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
        return true;
    }
});
 

Les ViewTreeObserver vous permettront de surveiller la mise en page juste avant de la dessiner (c’est-à-dire que tout a déjà été mesuré). À partir de là, vous pouvez obtenir les mesures mises à l’échelle à partir des ImageView .

46voto

Pedro Loureiro Points 6889

Appelez getIntrinsicHeight et getIntrinsicWidth sur le dessinable.

 public int getIntrinsicHeight ()

Since: API Level 1
Return the intrinsic height of the underlying drawable object. Returns -1 if it has no intrinsic height, such as with a solid color.


public int getIntrinsicWidth ()

Since: API Level 1
Return the intrinsic width of the underlying drawable object. Returns -1 if it has no intrinsic width, such as with a solid color.
 

http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight ()

C'est la taille du dessinable d'origine. Je pense que c'est ce que tu veux.

24voto

ubzack Points 1214

Le plus fiable et le plus puissant moyen d'obtenir drawable dimensions pour moi a été d'utiliser BitmapFactory pour décoder une image Bitmap. Il est très flexible, il peut décoder des images à partir d'un drawable de ressources, de fichiers, ou à d'autres sources.

Voici comment obtenir les dimensions d'un drawable ressources avec BitmapFactory:

BitmapFactory.Options o = new BitmapFactory.Options();
o.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
Bitmap bmp = BitmapFactory.decodeResource(activity.getResources(), R.drawable.sample_image, o);
int w = bmp.getWidth();
int h = bmp.getHeight();

Soyez prudent si vous utilisez plusieurs densité drawable dossiers en vertu de la res, et assurez-vous de spécifier inTargetDensity sur votre BitmapFactory.Les Options pour obtenir le drawable de la densité souhaitée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X