Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩

标签: android 图片 宽度 | 发表时间:2014-02-14 07:51 | 作者:zsjangel
出处:http://blog.csdn.net

在ListView中为了实现图片宽度100%适应ImageView容器宽度,让高度自动按比例伸缩功能,查了很多资料,搞了一下午都没找出个现成的办法,不过貌似有个结论了,就是:

Android自身不能实现这样的效果,只有自己动手丰衣足食

ImageView 中有个 scaleType 属性,设置图片在 view 中的缩放方式,本来以为 fit_center 可以实现,结果很无语,莫名其妙,没能实现宽度贴合容器宽度,两侧都是空白区域。


ImageView.ScaleType设置图解


解决方法:

1.  还是要利用 scaleType 的  center_crop 效果,让图片能始终按比例填充容器,不留空白区域。

2.  剩下最主要的功能就是动态设置 ImageView 容器的高度了,这样让图片能尽可能的完整展现出来,而且还可以实现 maxHeight 的效果,如果图片高度比例过大不至于把列表拉的太长。


                    int maxHeight = ZUI.dp2px(mContext, 300);
                    int height = (int) ((float) view.getWidth()/drawable.getMinimumWidth() * drawable.getMinimumHeight());
                    if (height > maxHeight) height = maxHeight;
                    view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height));


其中 view 即 ImageView 图片视图容器对象,drawable 就是要显示的图片资源。

drawable.getMinimumWidth()  和 drawable.getMinimumHeight() 是获取图片在屏幕上的可视高度宽度,不一定是图片的原始高宽度,跟屏幕的像素密度有关,大概就是这样子的吧。注意要用浮点数值类型,不然可能取整变成 1 的倍数了。


将 dp 值转为像素值,因为 java 代码中操作的高宽都是像素值,而样式中都是用 dip 来兼容屏幕的

    public static int dp2px(Context context, int dp)
    {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }


ok 大概就是这样搞定了,顺便弄个测试结果图




其实 center_crop  可以简单的实现该功能的,但是他不会自动扩展高度,他应该用的是图片的可视高度为容器高度然后再进行容器覆盖显示,也就是说容器高度不会按比例增大,导致图片几乎只显示一半不到的样子,如果图片比较小,那几乎没办法用了,还是必须要动态调整,如果图片尺寸比较大,特别是高度合适的话就可以直接用的





作者:zsjangel 发表于2014-2-13 23:51:13 原文链接
阅读:129 评论:0 查看评论

相关 [android 图片 宽度] 推荐:

Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩

- - CSDN博客移动开发推荐文章
在ListView中为了实现图片宽度100%适应ImageView容器宽度,让高度自动按比例伸缩功能,查了很多资料,搞了一下午都没找出个现成的办法,不过貌似有个结论了,就是:. Android自身不能实现这样的效果,只有自己动手丰衣足食. ImageView 中有个 scaleType 属性,设置图片在 view 中的缩放方式,本来以为 fit_center 可以实现,结果很无语,莫名其妙,没能实现宽度贴合容器宽度,两侧都是空白区域.

android截取屏幕图片

- - BlogJava-首页技术区
                mButton.setText("截屏次数:"+mPrintNum);.         //1.构建Bitmap   .         //2.获取屏幕   .         //3.保存Bitmap    .             //文件   .                 Toast.makeText(this, "截屏文件已保存至SDCard/PrintScreenDemo/ScreenImage/下", Toast.LENGTH_LONG).show();   .

android图片压缩方法

- - CSDN博客移动开发推荐文章
第一:我们先看下质量压缩方法.         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  .         while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         .

android 比较靠谱的图片压缩

- - ITeye博客
第一:我们先看下质量压缩方法:. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中. //循环判断如果压缩后图片是否大于100kb,大于继续压缩. baos.reset();//重置baos即清空baos.

AndroidのBitmap之大图片优化

- - 博客园_首页
不解释大家懂得,在listview 或grid或viewpager等大量大尺寸图片时,会造成OOM. 这里是优化图片内存的一个方法,注释写的很 明确... public Bitmap getBitmapFromNet(final String url,final int width,final int height){//从网络下载图片.

android回收图片使用内存

- - 移动开发 - ITeye博客
在android开发过程当中,如果要用到大量图片而你又没有做好图片内存的回收,很容易就会造成OOM内存溢出的问题. 下面介绍一种图片内存回收的方法,就是将图片从添加到的ViewGroup中一张一张拿出来回收,具体代码如下:. 其中的ViewGroup可以是ViewFlipper、ViewPager等等继承自ViewGroup的子类.

android 图片解码显示流程

- - CSDN博客推荐文章
android 可以在 gallery 里面显示内部存储的图片,支持 jpeg,png,gif,bmp 等,甚至文件类型和图片后缀名不一致,只要是图片文件就能显示,然后 git 只会显示第一帧图像,然而 android 其实是可以显示 gif 动画的,在浏览器里打开 gif 动画,就能够正常加载显示.

Android compress图片压缩介绍

- - 移动开发 - ITeye博客
        android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片. 有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络情况下),而且很耗流量,要想速度快,那么就需要减小图片的大小. 照相时获取小图片一般不太符合要求,因为,图片的清晰度会很差,但是这种情况有个好处就是应用速度会快些; 压缩图片,就是把大图片压缩小,降低图片的质量,在一定范围内,降低图片的大小,并且满足需求(图片仍就清晰).

android获取本地图片或拍照图片

- - CSDN博客移动开发推荐文章
直接上代码,代码中注释很清楚,本人觉得这个东西google本来自己就应该集成好,直接一个方法调用最好,因为这个用的比较多,一般的android手机中交流的软件基本上都需要这个东西. private ImageView image;// 要显示选择的图片. private Bitmap photo;// 选择好的图片的bitmap形式.

android 比较靠谱的选择图片以及拍照,保存图片

- - ITeye博客
在开发项目中用到这个功能,之前就按照学过的拍照和选择照片的功能,所以也没在意就写了上去,可是最后发现在有些机子里面获取到的数据时空的,所以会导致程序崩溃的情况出现,网上找了很多例子大多都是一样的,还是有问题,后来就查看跟踪了拍照后返回的数据写了下面的代码相对大多数机子是可行的,经测试还是比较靠谱的,包括拍照后图片翻转了90度问题都没问题.