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. Mysql基础。

    之前学SQL server的时候简单学过SQL的一点基础,Mysql就直接从外键约束开始继续学. 外键约束:foreign key 让表与表产生关系,从而保证数据的正确性. 1.在创建表时添加外键: ...

  2. MongoDB(NoSQL) 非关系型数据库

    目录 简单了解 mongoDB 简单使用mongoDB 简单了解 mongoDB # NoSQL 泛指非关系型的数据库 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅 ...

  3. .Net core 在类库中获取配置文件Appsettings中的值

    大多数情况,我们开发的程序中都含有很多个类库和文件夹,有时候,我们会遇到程序中的类库需要获取配置文件的信息的情况. 像dapper 中需要使用连接字符串的时候,那么我们一直从主程序中传值这是个不好的方 ...

  4. Werkzeug——python web开发工具包

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826062.html 一:Werkzeug是个啥 1)Werkzeug是一个工具包,它封装了很多东西,诸如 ...

  5. 攻防世界高手进阶之Web_python_block_chain(2018年DDCTFmini blockchain)

    打开题目大概看了一下,是有关区块链的题目, 感觉代码要格式化一下,不然没法看 代码格式化站点:https://www.html.cn/tool/js_beautify/ hash of genesis ...

  6. jmeter针对websocket协议的压测

    之前一直没有接触过websocket协议,所以一直对websocket的压测存在疑惑,在网上参考文章并不断尝试之后,终于有所得:第一次用jmeter的websoket插件,用的ws非加密协议,请求都能 ...

  7. 使用idea创建项目如何忽略iml文件

    在图中圈出的输入栏中输入“*.iml;”,点下OK就可以了,如图进入idea项目窗口,如图 点下file,进入file菜单窗口,如图 点下settings,进入到settings窗口,如图 在输入框f ...

  8. IDEA 注释模板

    类.接口.等文件注释: /** * @Description: * @author: tangsw * @date: ${DATE} ${TIME} * */ 方法上注释: /** * @Descri ...

  9. JSP中EL表达式的比较符号、字符串比较

    在EL表达式中我们可以使用运算符以达到我们想要的结果,运算符按作用分为以下几种: 1.算术运算符 +  例如:${6+6} .注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着 ...

  10. js沉思录一:js的核心概念

    js的核心概念: 原型.对象(Object).函数(Function); 原型:路由路径上非叶子结点的对象: 对象:无序属性(包括函数)的集合: 函数:函数上下文的集合: 原型: 原型的创建.指定.修 ...