Android Scale图像到最大尺寸

问题描述:

嗨,我正在加载图像的应用程序,我正在寻找缩放每个图像的最大可能的大小,例如,如果图像是一个风景图像(如果宽度较大比高度)我想拉伸的宽度来填补手机的宽度和缩放高度,以保持它的长宽比。如果高度大于宽度,即一幅肖像图像,图像应该缩放以适应手机的高度,然后调整宽度以保持纵横比我有一些麻烦让这个工作这里是我的'至今已完成,尽管任何帮助将不胜感激。Android Scale图像到最大尺寸

  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

当你说你有麻烦让你的代码工作,什么问题(S)有你有完全相同?异常抛出?图像没有按照你的预期重新调整? – Kerry

+0

Ru寻找这个http://stackoverflow.com/a/9478320/1012284 –

+0

我试图使用位图resizedbitmap和什么不是和得到OOM错误,所以我更多的是,我应该如何设置图像视图到我的W和H – user577732

用于获取显示宽度,高度

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

调整大小的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

问题是我需要知道图像尺寸是什么,以便我可以保持不想扭曲它的宽高比 – user577732

将高度或宽度增加到最大值,具体取决于哪一个已经更大。

现在,让我们说你有一个横向图像的工作:

你已经扩展了宽度它的最大尺寸,显示器的宽度

您展开侧是图像的宽度,所以假设显示宽度=宽度和图像的宽度= W:

宽度/ W = R

以r将显示宽度和所述图像宽度之间的比率。现在你需要使用它来增加你的身高。

只需将高度乘以比率,然后将图像的新高度设置为结果数字。

如果你最终得到了一幅肖像图像...嗯,我想你可以弄明白。这几乎是一回事。

毕竟,我认为这只是将图像定位在屏幕中心的问题。