2

嗨,我正在开发一个将加载图像的应用程序,我希望将每个图像缩放到最大可能的尺寸,例如,如果图像是横向图像(如果宽度大于高度)我想拉伸宽度填充手机的宽度并缩放高度以保持其纵横比。如果高度大于宽度,即纵向图像,则应缩放图像以适合手机的高度,然后应调整宽度以保持纵横比,我在使其正常工作时遇到了一些麻烦,这就是我到目前为止,我们将不胜感激任何帮助。

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

2 回答 2

1

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

现在,假设您正在使用横​​向图像:

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

您展开的一侧是图像的宽度,因此假设显示宽度=宽度并且图像的宽度= w:

宽度 / w = r

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

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

如果你最终得到一个肖像图像......好吧,我想你能弄清楚。这几乎是一回事。

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

于 2012-05-27T07:48:22.647 回答
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);
于 2012-05-27T08:26:36.187 回答