ImageView 继承自View组件,主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示。ImageView可以适用于任何布局中,并且Android为其提供了缩放和着色的一些操作。

1. foreground、src 和 background 属性区别

1)background指的是背景,foreground指的是前景,而src指的是内容;三者可以同时使用;
2)src填入图片时,是按照图片大小直接填充,并不会进行拉伸;而使用backgroundforeground填入图片,则是会根据ImageView给定的宽度来进行拉伸;
3)backgroundforeground是所有view都有的属性,总是缩放到view的大小,不受scaleType影响;而src是ImageView特有属性,它会受到scaleType的影响。

举个栗子:

<ImageView
android:layout_width="260dp"
android:layout_height="260dp"
android:foreground="#99000000"
android:background="#ff0000"
android:src="@mipmap/ic_launcher"/>

效果图:

 
前背景效果图

从图上可以看出,虽然foregroundsrc都为前景,但是foreground却在src之上。从层级上比较:foreground>src>background

2. adjustViewBounds属性用法

ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比。 adjustViewBounds详细介绍,请移驾 —— 《Android辟谣篇 —— ImageView宽高自适应》

3. 设置透明度

ImageView 设置透明度主要有以下几种方法:

  • android:alpha // 0f~1f
  • setAlpha(float alpha); // 0f~1f
  • setAlpha(int alpha); // 0~255,已过时
  • setImageAlpha(int alpha); // API>=16
4. 设置图片方式

1)设置前景

  • foreground

xml布局中:

android:foreground="@color/blue"
android:foreground="@mipmap/ic_launcher"
android:src="@mipmap/ic_launcher"

Java代码中:

// 设置前景图
image.setForeground(getResources().getDrawable(R.mipmap.ic_launcher));
// 设置前景色
image.setForeground(getResources().getDrawable(R.color.blue));

注意:
关于设置foreground无效问题,View源码片段:

case R.styleable.View_foreground:
if (targetSdkVersion >= VERSION_CODES.M || this instanceof FrameLayout) {
setForeground(a.getDrawable(attr));
}
break;

foreground属性只有在以下两种情况下生效:
(1) Android M版本(6.0)及以上 ;
(2) FrameLayout本身及其子类。

  • src

xml布局中:

android:src="@mipmap/ic_launcher"

Java代码中:

// 1. setImageDrawable(Drawable drawable)
image.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher)); //不会变形
// 2. setImageBitmap(Bitmap bm)
Stringpath=Environment.getExternalStorageDirectory()+File.separator+”test.jpg”;
Bitmap bm = BitmapFactory.decodeFile(path);
image.setImageBitmap(bm);//不会变形
// 3. setImageResource(int resId)
image.setImageResource(R.drawable.ic_launcher);//不会变形

2)设置背景

xml布局中:

android:background="@mipmap/ic_launcher"
android:background="@color/blue"

Java代码中:

// 1. setBackground(Drawable background)
image.setBackground(getResources().getDrawable(R.drawable.ic_launcher));//变形
// 2. setBackgroundResource(int resid)
image.setBackgroundResource(R.drawable.ic_launcher);//变形
// 3. setBackgroundDrawable(Drawable background)
image.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));//变形 // setBackgroundColor(int color)
image.setBackgroundColor(getResources().getColor(R.color.blue));
5. ScaleType属性

android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小,Java代码中可以通过imageView.setScaleType(ImageView.ScaleType.CENTER);来设置。 可选值如下:

  • MATRIX / matrix:用矩阵的方式绘制,从ImageView的左上角开始绘制原图,不缩放图片, 超过ImageView部分作裁剪处理;
  • CENTER / center:保持原图的大小,显示在ImageView的中心。当原图的尺寸大于ImageView的尺寸,超过部分裁剪处理;
  • CENTER_CROP / centerCrop:保持横纵比缩放图片,直到完全覆盖ImageView为止(指的是ImageView的宽和高都要填满),原图超过ImageView的部分作裁剪处理;
  • CENTER_INSIDE / centerInside:将图片的内容完整居中显示,通过按比例缩小原图尺寸的宽高等于或小于ImageView的宽高。如果原图的尺寸本身就小于ImageView的尺寸,则原图的尺寸不作任何处理,居中显示在ImageView;
  • FIT_XY / fitXY:把原图宽高进行不保持原比例放缩,直到填充满ImageView为止;
  • FIT_START / fitStart:把原图按比例放缩使之等于ImageView的宽高,缩放完成后将图片放在ImageView的左上角;
  • FIT_CENTER / fitCenter:把原图按比例放缩使之等于ImageView的宽高使之居中显示,缩放后放于中间;
  • FIT_END / fitEnd:把原图按比例放缩到ImageView的宽高,缩放完成后将图片放在ImageView的右下角。
 
ScaleType属性效果图
参考

ImageView官方文档,开启传送门

作者:翻译不了的声响
链接:https://www.jianshu.com/p/7d713775df9f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android ImageView属性的更多相关文章

  1. Android ImageView的scaleType属性与adjustViewBounds属性(转)

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  2. Android课程---Android ImageView的scaleType属性与adjustViewBounds属性(转)

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  3. Android ImageView的scaleType属性与adjustViewBounds属性

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  4. Android ImageView的scaleType属性与adjustViewBounds属性(转载)

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  5. Android——ImageView的scaleType属性与adjustViewBounds属性 (转)一

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  6. 【转】Android ImageView的scaleType属性与adjustViewBounds属性

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  7. [转]Android ImageView的scaleType属性与adjustViewBounds属性

    Android ImageView的scaleType属性与adjustViewBounds属性   ImageView的scaleType的属性有好几种,分别是matrix(默认).center.c ...

  8. 【腾讯Bugly干货分享】Android ImageView 正确使用姿势

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5832602d7196970d65901d76 导语 本文主要介绍了ImageV ...

  9. android布局属性详解

    RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal  水平居中 android:layout_cen ...

随机推荐

  1. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  2. js修改页面标题 title

    如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! /* * *添加首页description元数据meta标签 *创建一个meta元素,sName为该meta ...

  3. 关于mybaits的注解@Param

    一.含义 @param作为dao层的注解,为了解决多个参数时,参数类型不一致的问题. <select id="findEmpById" resultType="co ...

  4. 机器学习笔记4:SVM支持向量积的推导过程

    内容来自:https://github.com/GreedyAIAcademy/Machine-Learning 最初 支持向量机的目的:找到一条好的分割线 什么杨的分割线最好? 有最大间隔的分割线最 ...

  5. Redis的内存分配

    内存分配 Redis进程的内存消耗主要包括:自身内存 + 对象内存 + 缓冲内存 + 内存碎片.1 自身内存 Redis自身内存消耗非常少,通常used_memory在800KB左右,used_mem ...

  6. Tensorflow简单实践系列(二):张量

    在上一节中,我们安装 TensorFlow 并运行了最简单的应用,这节我们熟悉 TensorFlow 中的张量. 张量是 TensorFlow 的核心数据类型.数学里面也有张量的概念,但是 Tenso ...

  7. idea忽略.iml文件

    .iml 和 eclipse中的.classpath,.project都属于开发工具配置文件, 也就是在项目导入ide的过程中生成的配置文件,每个人开发环境是不一样的,所以这个文件没必要提交. 而且如 ...

  8. python预课02 time模块,文本进度条示例,数字类型操作,字符串操作

    time模块 概述:time库是Python中处理时间的标准库,包含以下三类函数 时间获取: time(), ctime(), gmtime() 时间格式化: strftime(), strptime ...

  9. spark读写Oracle、hive的艰辛之路(二)-Oracle的date类型

    近期又有需求为:导入Oracle的表到hive库中: 关于spark读取Oracle到hive有以下两点需要说明: 1.数据量较小时,可以直接使用spark.read.jdbc(orclUrl,tab ...

  10. How would you differentiate JDK, JRE, JVM, and JIT?

    Q5. How would you differentiate JDK, JRE, JVM, and JIT?A5. There is no better way to get the big pic ...