【Android从零单排系列九】《Android视图控件——ImageView》

2023-02-10 21:04:20 浏览数 (1)

目录

前言

一.ImageView基本介绍

二.ImageView常用主要属性介绍

三.imageView几种加载图片方式解析

四.图片加载框架

1.图片加载框架

2.图片框架ImageLoader,Picasso,Fresco,Glide对比

前言

小伙伴们,在上文中我们介绍了Android视图控件Button控件,本文我们继续盘点,介绍一下Android视图控件中的第四个控件——ImageView。

一.ImageView基本介绍

 在 Android 应用开发中,我们通常使用 ImageView 来显示图片。

二.ImageView常用主要属性介绍

android:src

设置图片资源

android:scaleType

设置图片缩放类型

android:alpha

设置图片透明度

src

src 设置图片资源,接受要展示的图片资源。

backGround 是 View(ImageView是View的子类)的背景,会把图片拉大铺满整个View。

scaleType

  • fitStart:保持宽高比例缩放图片,直到较长的边与image的边长相等,缩放完成后将图片放在ImageView的左上角
  • fitCenter:默认值,同上,缩放后放中间
  • fitEnd:同上,缩放后放右下角
  • fitXY:对图像横纵方向进行独立缩放,使得该图片安全适应imageview,但图片宽高比可能发生改变
  • center:保持原图大小,显示在中心,当原图大小大于imageview大小,超过部分裁剪处理
  • centerCrop:保持宽高比缩放,直到完全覆盖imageview,可能出现图片显示不完整
  • centerInside:保持宽高比缩放,知道imageview能完全显示图片
  • matrix:不改变原图大小,从imageview左上角开始绘制原图,原图超过imageview的部分作裁剪处理

alpha

设置透明度

代码语言:javascript复制
        <ImageView
            android:layout_width="260dp"
            android:layout_height="260dp"
            android:background="@mipmap/ic_launcher"/>

        <ImageView
            android:layout_width="260dp"
            android:layout_height="260dp"
            android:alpha="0.3"
            android:src="@mipmap/ic_launcher" />

三.imageView几种加载图片方式解析

 imaegView.setImageBitmap();  imaegView.setImageResource();  imaegView.setImageDrawable();  imaegView.setImageURI();

 imaegView.setBackground();  imaegView.setBackgroundResource();  imaegView.setBackgroundDrawable();   

详细的参见:Android 中ImageView 显示图片的几种方法简要分析_再见孙悟空_的博客-CSDN博客

四.图片加载框架

1.图片加载框架

  • imageloader
  • picasso
  • Glide
  • Fresco

ImageLoader:旨在为图像加载,缓存和显示提供强大,灵活可定制的工具。他提供了大量的配置选项和良好的控制图像加载和缓存过程。

Picasso:和Square的网络库一起能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现

Glide:模仿了Picasso的API,而且在他的基础上加了很多的扩展(比如gif等支持),Glide默认的Bitmap格式是RGB_565,比 Picasso默认的ARGB_8888格式的内存开销要小一半;Picasso缓存的是全尺寸的(只缓存一中),而Glide缓存的是跟ImageView尺寸相同的(即56*56和128*128是两个缓存)。

Fresco:最大的又是在于5.0以下(最低2.3)的Bitmap加载。在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区)。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。为什么说5.0以下呢?因为在5.0系统以后系统默认就是存储在Ashmem区了。

2.图片框架ImageLoader,Picasso,Fresco,Glide对比

ImageLoader

比较老的框架,稳定,加载速度适中,缺点在于不支持GIF图片加载,使用稍微繁琐,并且缓存机制没有和http的缓存很好的结合,完全是自己的一套缓存机制

Picasso

使用方便,一行代码完成加载图片显示,框架体积小

缺点在于不支持GIF,并且他可能是想让服务器去处理图片的缩放,他缓存的图片是未缩放的,并且默认使用ARGB_8888格式缓存图片,缓存体积大

Glide

支持GIF图片的加载,图片缓存也会自动缩放,默认使用RGB_565格式缓存图片,是Picasso缓存体积的一半

Fresco

优点:

1.图片存储在安卓系统的匿名共享内存,而不是虚拟机的堆内存中,图片的中间缓冲数据也存放在本地堆内存,所以,应用程序有更多的内存使用,不会因为图片加载而导致oom,同时也减少垃圾回收器频繁回收Bitmap导致的界面卡顿,性能更高。

2.渐进式加载JPEG图片,支持图片从模糊到清晰加载

3.图片可以以任意的中心店显示在ImageView,而不仅仅是图片的中心

4.JPEG图片改变大小也是在native进行的,不是在虚拟机的堆内存,同样减少OOM

5.很少的支持GIF图片的显示

缺点:

框架较大,影响APK体积使用较繁琐。

今天就先总结到这,后面如果有问题大家可以评论区留言或者给我发私信。

0 人点赞