2012-05-27 4 views
2

Salut je travaille sur une application qui va charger des images et je cherche à mettre à l'échelle chaque image à sa plus grande taille, par exemple si l'image est une image de paysage (si la largeur est plus grande que la hauteur) je voudrais étirer la largeur pour remplir la largeur du téléphone et la hauteur de l'échelle pour garder son ratio d'aspect. Si la hauteur est plus grande que la largeur, c'est-à-dire une image portrait, l'image doit être mise à l'échelle pour s'adapter à la hauteur du téléphone et la largeur doit alors s'ajuster pour conserver le rapport d'aspect que j'ai eu un peu de mal. Nous l'avons fait jusqu'à présent, mais toute aide serait grandement appréciée.Android Scale Image à la plus grande taille

  final ImageView i = new ImageView(mContext); 
      i.setImageResource(mImageIds[position]); 
      i.setBackgroundResource(android.R.color.black); 
      //TODO need to get actual size of drawable not view size which is 0 
      ViewTreeObserver vto = i.getViewTreeObserver(); 
      vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
       public boolean onPreDraw() { 
        int w = i.getMeasuredWidth(); 
        int h = i.getMeasuredHeight(); 
        Display display = getWindowManager().getDefaultDisplay(); 
        int width = display.getWidth(); 
        int height = display.getHeight(); 
        if(w <= h){ 
         //TODO need to think about landscape 
         h = height - convertDpToPixel(50, context); 
         w = w*(width); 
        }else{ 
         h = h*(height); 
         w = width; 
        } 
        //TODO set imageview to w and h 

        return true; 
       } 
      }); 
+0

Quand vous dites que vous avez eu du mal à obtenir votre code de travail, quel problème (s) avez-vous eu exactement ? Exception levée? L'image n'est pas re-s-zed comme vous l'attendiez? – Kerry

+0

Ru la recherche de ce http://stackoverflow.com/a/9478320/1012284 –

+0

j'ai essayé d'utiliser bitmap resizedbitmap et ce qui ne se produisait pas et obtenait des erreurs oom donc je me demandais comment je devais définir la vue de l'image à mon w et h – user577732

Répondre

1

pour get largeur d'affichage, la hauteur

DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int height = displaymetrics.heightPixels; 
    int wwidth = displaymetrics.widthPixels; 

Pour Redimensionner Imageview

ImageView img=(ImageView)findViewById(R.id.ImageView01); 
Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.sc01); 
Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp, width, height, true); 
img.setImageBitmap(resizedbitmap); 
+0

le problème est que j'ai besoin de savoir quelles sont les dimensions des images afin que je puisse maintenir le rapport d'aspect je ne veux pas le déformer – user577732

1

Augmentez la hauteur ou la largeur à leur maximum, selon ce qui est déjà plus grand.

Maintenant, disons que vous travaillez avec une image de paysage:

Vous avez déjà étendu la largeur de sa taille maximale, la largeur de l'écran

Le côté vous avez décompressé est la largeur de l'image , donc en supposant que la largeur d'affichage = largeur et la largeur de l'image = w:

largeur/w = r

So r serait le rapport entre la largeur d'affichage et la largeur de l'image. Maintenant, vous devez l'utiliser pour augmenter votre taille.

Il suffit de multiplier la hauteur par le ratio et de définir la nouvelle hauteur de l'image au nombre résultant.

Si vous vous retrouvez avec une image de portrait ... eh bien, je pense que vous serez en mesure de le comprendre. C'est à peu près la même chose. Après tout cela, je pense que ce serait juste une question de positionnement de l'image au centre de l'écran.

Questions connexes