Android Scale Image到最大尺寸

时间:2012-05-27 06:43:25

标签: android imageview 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;
                }
            });

2 个答案:

答案 0 :(得分:1)

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

现在,假设您正在处理风景图片:

您已经将宽度扩展到最大尺寸,显示宽度

你扩展的那一面是图像的宽度,所以假设显示宽度=宽度,图像的宽度= w:

宽度/ w = r

因此r将是显示宽度和图像宽度之间的比率。现在你需要用它来增加身高。

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

如果你最终得到了一幅肖像......好吧,我想你能够弄明白了。这几乎是一回事。

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

答案 1 :(得分:1)

获取显示宽度,高度

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

用于调整图像视图

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