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

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

时间: 2024-11-03 21:19:12

Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩的相关文章

图片按比例自动伸缩效果代码

图片按比例自动伸缩效果代码 <script> function resizepic(thispic) { if(thispic.width>570) thispic.width=570; } function bbimg(o) {   var zoom=parseInt(o.style.zoom, 10)||100;   zoom+=event.wheelDelta/12;   if (zoom>0) o.style.zoom=zoom+'%';   return false; }

Android 设置ImageView宽度固定,其高度按比例缩放适应

  今天和项目经理对喷了一下,他说在应用的列表数据中的图片应该宽度固定,高度按比例缩放自适应,我说,那岂不是很丑!直接让运营那边把图片处理成固定宽高比不就好了,省的我客户端麻烦了. 这家伙不同意,为毛呢,因为我们公司的图片尼玛全部是从别的网站上荡过来的,几万张图片,本身不知道图片宽度和高度....我日....   好吧,既然提出了这么个需求,那我就实现呗,丑不丑就我就不管了...   我在群里问了些人有木有相关的实现,可惜没人鸟我,不知道是不是我问的太简单了还是没人会...于是乎网上搜了些相关的

Android ImageView设置长度高度为wrap_content时高度根据图片比例自适应

<ImageView android:id="@+id/img_1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerInside" android:src="@drawable/im

Android获取常用辅助方法(获取屏幕高度、宽度、密度、通知栏高度、截图)_Android

我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现.下面就分享一下Android中常用的一些辅助方法: 获取屏幕高度: /** * 获得屏幕高度 * @param context * @return * by Hankkin at:2015-10-07 21:15:59 */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) cont

ie6 文字溢出bug(注释bug) 双倍边距(margin)的bug 宽度100%问题解决方法

1.在以下情况下将会引起文字溢出bug 一个容器包含2两个具有"float"样式的子容器. 第二个容器的宽度大于父容器的宽度,或者父容器宽度减去第二个容器宽度的值小于3 在第二个容器前存在注释(这也是为什么此bug也叫做"IE6注释bug"的原因). 2.引起bug时的效果图                 这是正常效果        IE6下却多了一个"怪"字,真是怪   3.修复该bug的解决方案 改变结构,不出现[一个容器包含2两个具有&q

Android布局自定义Shap圆形ImageView可以单独设置背景与图片_Android

一.图片预览: 一.实现功能: 需求要实现布局中为圆形图片,图片背景与图标分开且合并到一个ImageView. 二.具体实现: XML中布局中定义ImageView,关健设置两个参数 Android:backgroup(设置背景),Android:src(设置ImageVIew中图片),圆形图片制作Drawable下定义xml shap样式(solid-color,size-width\hight) XML代码如下: <ImageView android:id="@+id/zhongjie

Android布局自定义Shap圆形ImageView可以单独设置背景与图片

一.图片预览: 一.实现功能: 需求要实现布局中为圆形图片,图片背景与图标分开且合并到一个ImageView. 二.具体实现: XML中布局中定义ImageView,关健设置两个参数 Android:backgroup(设置背景),Android:src(设置ImageVIew中图片),圆形图片制作Drawable下定义xml shap样式(solid-color,size-width\hight) XML代码如下: <ImageView android:id="@+id/zhongjie

Android实现图片轮播切换实例代码_Android

利用Android的ViewFlipper和AnimationUtils实现图片带有动画的轮播切换,其中当点击"上一张"图片时,切换到上一张图片:当点击"下一张"图片时,切换到下一张图片.其效果图如下: 设置布局文件,其内容如下: activity_image_flipper_shade.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm

Android压缩图片到100K以下并保持不失真的高效方法

 在开发Android企业应用时,会经常上传图片到服务器,而我们公司目前维护的一个项目便是如此.该项目是通过私有apn与服务器进行交互的,联通的还好,但移动的速度实在太慢,客户在使用软件的过程中,由于上传的信息中可能包含多张图片,会经常出现上传图片失败的问题,为了解决这个问题,我们决定把照片压缩到100k以下,并且保证图片不失真(目前图片经过压缩后,大约300k左右).于是我就重新研究了一下Android的图片压缩技术. Android端目录结构如下图所示: 使用的第三方库jar包,如下图所示: