Android中图片适配屏幕问题

来源:互联网 发布:日系文艺男装淘宝店铺 编辑:程序博客网 时间:2024/05/22 14:19

近日在学习美化android应用的界面,在做APP启动画面时遇到这种情况:自己很喜欢的一张图跟手机屏幕分辨率不统一!!多么痛苦的一件事!于是网上各种搜寻,有很多种方法,基本都试过,效果都不太好,下面说说网上很多人的回答。

其中一种方法就是在layout中加上setScaleType,可以设置几个值,下面分别说明:

1、ImageView.ScaleType.CENTER。按照图片本身的大小在View中居中显示,如果图片本身大于屏幕尺寸的话,则截取中间部分显示。

2、ImageView.ScaleType.CENTER_CROP。按比例扩大,仍然是居中显示,使得图片的宽或高大于或等于View的边长。

3、ImageView.ScaleType.CENTER_INSIDE。按比例缩小,效果与上面一点相反。

4、ImageView.ScaleType.FIT_CENTER。把图片按比例扩大/缩小到View的宽度,居中显示。

5、FIT_START, FIT_END在图片缩放效果上与FIT_CENTER一样,但是显示的位置不同,FIT_START是置于顶部,FIT_CENTER居中,FIT_END置于底部。

6、 FIT_XY。不按比例缩放图片,目标是把图片塞满整个View。此方法可使图片全屏显示。

但是!!!以上方法会剪切图片或者直接变形,所以最终效果是非常差的。下面是效果图:

然后我找到一个博主写的方法,在使图片填满屏幕的前提下,最大程度保证图片的缩放效果,保证图片不变形。下面贴上代码:

 private void setBsetBitmap(Bitmap bitmap, ImageView imageView, int width,
                        int height) {
                //计算最佳缩放倍数
//                float scaleX = (float) width / bitmap.getWidth();
//                float scaleY = (float) height / bitmap.getHeight();
//                float bestScale = scaleX < scaleY ? scaleX : scaleY;
                //计算最佳缩放倍数,以填充宽高为目标
                float scaleX = (float) width / bitmap.getWidth();
                float scaleY = (float) height / bitmap.getHeight();
                float bestScale = scaleX > scaleY ? scaleX : scaleY;
                //以填充高度的前提下,计算最佳缩放倍数
        //        float bestScale = (float) height / bitmap.getHeight();

                float subX = (width - bitmap.getWidth() * bestScale) / 2;
                float subY = (height - bitmap.getHeight() * bestScale) / 2;

                Matrix imgMatrix = new Matrix();
                imageView.setScaleType(ScaleType.MATRIX);
                //缩放最佳大小
                imgMatrix.postScale(bestScale, bestScale);
                //移动到居中位置显示
                imgMatrix.postTranslate(subX, subY);
                //设置矩阵
                imageView.setImageMatrix(imgMatrix);

                imageView.setImageBitmap(bitmap);
        }

参数:bitmap:即所要显示的图片;imageView:显示图片的控件;width:屏幕的宽度;height:屏幕高度。屏幕的宽高可用如下方法获取:

WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();

在要显示图片的界面中调用此方法可使图片不变形贴合屏幕,当然这样做跟用适合屏幕分辨率的图片显示还是有差别的,毕竟不是原图,经过一定比例的调整,但是在这几种方法中,这个方法的效果是最好的。下面是效果图:

虽然图片被截掉了一部分但是整体看起来好看很多了,因为这张图片尺寸比手机高太多,所以差别会大一点,如果只是尺寸跟手机屏幕差别不大的话与原图差别是非常细微的。

还有一种方法是在layout中设置保持宽高比,setadjustViewBounds(也可在代码中完成),需要注意的是这个方法需要设置maxHeight和maxWidth,同时设置layout_height和layout_width为wrap_content,也可达到同样效果,但是用这个方法在不同尺寸的手机上仍旧会有不同效果,所以还是写一个setBsetBitmap方法比较好用,当然了,如果你有适配屏幕的图片就不用那么麻烦了。

新人第一次写博,也刚学习安卓不长时间,有什么错误各位大虾请指正!

参考文章:http://blog.csdn.net/larryl2003/article/details/6919513

http://www.apkbus.com/android-178800-1-1.html


0 0