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

问题背景

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

从网络加载图片,放入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方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端知识分享

第126天:移动端-原生实现响应式模态框

下面采用HTML+CSS+JavaScript实现模态框,并采用Flex布局和多媒体查询实现响应式。

14130
来自专栏前端说吧

JS - 兼容到ie7的自定义样式的滚动条封装

62440
来自专栏james大数据架构

ImageView的scaletype属性

android:scaleType是控制图片如何 resized/moved来匹对ImageView的size。ImageView.ScaleType / an...

19580
来自专栏Android知识点总结

Android关于Paint你所知道的和不知道的一切

29120
来自专栏Android开发指南

自定义圆环进度条

42560
来自专栏cnblogs

深入理解及应用Position

position俗称定位,主要取值及作用如下: static 默认值。没有定位,出现在正常文档流中 absolute 绝对定位,相...

21160
来自专栏封碎

Android画图之抗锯齿 博客分类: Android小技巧 Android

    在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。     方法一:给Paint加上抗锯齿标志。然后将...

27320
来自专栏IMWeb前端团队

Canvas实现progress效果

据说本贵族圈每月不分享就邀请雪糕。。。所以分享下一个简单的Canvas插件   Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像,你可以使用j...

26970
来自专栏分享达人秀

两分钟掌握FrameLayout帧布局

前面学习了线性布局、相对布局、表格布局,那么本期来学习第四种布局——FrameLayout帧布局。 一、认识FrameLayout 帧布局是An...

24890
来自专栏肖蕾的博客

第六章:常用控件日常科普标签(Lable)图片(Image)按钮(Button)

1.控件是用于开发构建用户界面(UI)控件,帮助完成开发中视窗,文本框,按钮,下拉菜单,等界面元素 2.在LibGdx中,提供的控件有 按钮,勾选框,下拉框,...

12320

扫码关注云+社区

领取腾讯云代金券