美文网首页精选案例Android知识程序员
听说你想控制网络图片显示的尺寸

听说你想控制网络图片显示的尺寸

作者: 代码咖啡 | 来源:发表于2016-09-19 18:38 被阅读344次

问题背景

在最近项目中,有这么一种情况要实现:

从网络加载图片,放入GridView的ImageView里面,要求ImageView宽高保持一致。

这个很简单嘛!自定义控件继承ImageView,重写onMeasure方法,让高度和宽度保持一致就可以了!

public class SqureImageView extends ImageView {

    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attr, defStyleAttr);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (getDrawable() == null) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
        // 计算ImageView的宽度
        int viewWidth = View.MeasureSpec.getSize(widthMeasureSpec);
        // 高度等于宽度
        int viewHeight = viewWidth;
        // 将计算出的宽度和高度设置为图片显示的大小
        setMeasureDimension(viewWidth, viewHeight);
     }
}

写好代码跑了一下,傻眼了:

效果图1

图片竟然不是正方形的,和说好的不一样啊T.T

那么问题来了:如何将网络获取的图片铺满整个控件呢?

解决方法

其实想要的效果是这样的:

想要的效果

如何让图片高度占满控件,宽度自己裁剪呢?本来我的想法是,将网络图片下载到本地,然后用BitmapFactory实现裁剪,但是后来阻止了这个愚蠢的想法,从时间复杂度空间复杂度来说,处理N个这样的图片有点吃不消,后来我想起了之前用过的一个ImageView属性scaleType,scaleType有如下几个值:

fitCenter(默认):
图片居中,效果如同图【效果1】
fitXY:
图片的宽高和ImageView的宽高相同,图片变形
fitStart:
图【效果1】基础上,图片在ImageView顶部或左侧
fitEnd:
图【效果1】基础上,图片在ImageView底部或右侧
centerCrop:
图片会占满ImageView,超出的部分不显示
fitXY效果

通过设置scaleType为centerScrop,我将图片占满屏幕,实现了想要的效果。

补充

  1. 如果有小伙伴想要实现更加复杂的效果,比如:图片占满控件且居中。大家可以用之前说的那个笨方法,但是容易出现内存溢出。
  2. ImageView的setImageUri方法无法直接加载网络图片,可以使用ImageLoader的displayImg方法

相关文章

  • 听说你想控制网络图片显示的尺寸

    问题背景 在最近项目中,有这么一种情况要实现: 从网络加载图片,放入GridView的ImageView里面,要求...

  • 公众号图片展示的重要性

    (1)尺寸 尺寸包括两方面的内容:一是图片本身的尺寸大小,即像素;二是排版中的图片显示尺寸。 图片高清显示的容量大...

  • CSS图片剪切

    如何让控制图片显示的尺寸 在网站设计中,有时候会遇到对一张图片做多处使用,而每处显示的尺寸又不一定都一样,在传统作...

  • iOS webview加载html代码 屏幕适配

    width 是你想要限制的图片的最大宽度当图片的宽度小于width时,会按原尺寸显示当图片的宽度大于width时,...

  • Fresco 加载网络图片被裁剪

    遇到一个Fresco 从网络加载图片,被放大并剪裁掉了而显示不全。百思不得解。对比了本地图片的尺寸跟网络加载图片的...

  • iOS 多图片合成视频

    直接上代码 注意事项 图片适配尺寸,不同规格的都居中显示,留有黑边, 时间控制,多少帧为1秒, 每张图显示多少帧,...

  • html 笔记

    1. 背景图片用css是修改不了图片的尺寸的,只能修改图片中截取显示的大小 用img可以修改显示图片的尺寸 2. ...

  • 图片拉伸

    iOS中的图片拉伸,并不是放大或者缩小图片的尺寸。因为即使你能放大到你想要的大小,但那样显示出来的图片也是失真的。...

  • iOS 设置UIImageView图片适应

    在使用SDWebimage获取图片的时候,往往因为图片尺寸和显示的ImageView尺寸不一样导致图片拉伸。提供一...

  • WKWebView的坑之图片显示不完全

    最近在做iPad Pro适配时遇到了WKWebView图片显示不完全的坑 在显示网页中的大尺寸图片时,图片显示不完...

网友评论

    本文标题:听说你想控制网络图片显示的尺寸

    本文链接:https://www.haomeiwen.com/subject/lidnettx.html