【android】ImageView的src和background的区别以及两者的妙用
一、ImageView中XML属性src和background的区别:
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸 。src是图片内容(前景),bg是背景,可以同时使用。
此外: scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放方式
二、 解决android:background背景图片被拉伸问题 :
如上所述,background设置的图片会跟View组件给定的长宽比例进行拉伸。举个例子, 36x36 px的图标放在 xhdpi 文件夹中,在854x480(FWVGA,对应hdpi)环境下,按照
xhdpi : hdpi : mdpi: ldip = 2 : 1.5 : 1 : 0.75
的比例计算,在FWVGA下,图标的实际大小应该是 27x27。
但是当我把它放到一个 layout_width = 96px, layout_height = 75px 的 LinearLayout,布局代码如下:
[html] view plain copy
- < LinearLayout android:gravity = "center" android:layout_width = "96px" android:layout_height = "75px" >
- < ImageButton android:layout_width = "wrap_content" android:layout_height= "wrap_content" android:background = "@drawable/toolbar_bg" />
- </ LinearLayout >
实际情况是,我们得到的ImageButton的大小是 33x27,很明显width被拉伸了,这是我们不想看到的情况。
解决方案一:
代码中动态显式设置ImageButton的layout_width和layout_width,如下
[java] view plain copy
- LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams( 27 , 27 );
- layout.addView(imageButton, layoutParam);
不过,事实上我们并不希望在代码存在“硬编码”的情况。
解决方案二:
在你通过setBackgroundResource()或者在xml设置android:background属性时,将你的background以XML Bitmap的形式定义,如下:
[html] view plain copy
- <? xml version = "1.0" encoding = "utf-8" ?>
- < bitmap xmlns:android = "http://schemas.android.com/apk/res/android"
- android:id = "@id/toolbar_bg_bmp"
- android:src = "@drawable/toolbar_bg"
- android:tileMode = "disabled" android:gravity = "top" >
- </ bitmap >
调用如下:
imageButton.setBackgroundResource(R.drawable.toolbar_bg_bmp)
或者
<ImageButton ... android:background="@drawable/toolbar_bg_bmp" ... />
若背景图片有多种状态,还可参照toolbar_bg_selector.xml:
[html] view plain copy
- <? xml version = "1.0" encoding = "utf-8" ?>
- < selector xmlns:android = "http://schemas.android.com/apk/res/android" >
- < item android:state_pressed = "true" >
- < bitmap android:src = "@drawable/toolbar_bg_sel" android:tileMode = "disabled" android:gravity = "top" />
- </ item >
- < item >
- < bitmap android:src = "@drawable/toolbar_bg" android:tileMode = "disabled" android:gravity = "top" />
- </ item >
- </ selector >
如此,不管是通过代码方式setBackgroundResource()或XML android:background方式设置背景,均不会产生被拉伸的情况。
三、 imageButton 使用透明图片 :
在Android上有很多不规则按钮。如:

这个时候,我们如果想做成不规则按钮的话,第一步就是搞一张边缘透明的png图片,然后用src指定到他,这个时候我们会发现,还没有达到要的效果,还有图片周围还是有一层渲染。此时还要搞第二步:需要对ImageButton设置背景属性android:background="#00000000",就实现了不规则按钮的效果了。如图:

有朋友可能会说, 直接用background指定该图片就ok啦, 可是,如果用 background指定,会使图片填充整个imageButton.比如imageButton长宽200,而图片长款只有50,那么图片就会被拉伸4倍变模糊。而我们要达到的效果不是为了填充。像上面锤子图标一样。占中间一部分就OK了。
【android】ImageView的src和background的区别以及两者的妙用的更多相关文章
- ImageView的src和background的区别
参考资料: http://blog.csdn.net/dalleny/article/details/14048375 http://www.android100.org/html/201508/27 ...
- android imageview使用的时候 引用资源src和background的区别
android imageview使用的时候 引用资源时src和background的区别 src更强调内容并且不行拉伸图片进行适配,而background更注重引用图片,会对图片进行拉伸
- ImageView的src与background及ScaleType
1 概述 开发中经常使用Imageview的src和background属性,从字面上看src是路径,background是背景.二者都可以显示drawable或者颜色.设置drawable图片资源时 ...
- 【android】ImageView的src和background以及两者之间的神奇的差异
一.ImageView中XML属性src和background的差别: background会依据ImageView组件给定的长宽进行拉伸.而src就存放的是原图的大小,不会进行拉伸.src是图片内容 ...
- Android 代码里设置ImageView的src和background
设置ImageView的src: image.setImageDrawable(getResources().getDrawable(R.drawable.blackk)); String path= ...
- 【Android 界面效果32】ImageView中XML属性src和background的区别
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸. src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对sr ...
- ImageView中XML属性src和background的区别
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸. src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对sr ...
- [android界面]android中src和background区别——前景与背景
ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前 ...
- Android ImageView属性
ImageView 继承自View组件,主要功能是用于显示图片,实际上它不仅仅可以用来显示图片,任何Drawable对象都可以使用ImageView来显示.ImageView可以适用于任何布局中,并且 ...
随机推荐
- tupian
http://www.iconfont.cn/https://icons8.com/http://ico.58pic.com/http://www.easyicon.net/
- markdown2 在win10下无法预览解决方案
今天升级完Win10发现心爱的markdownPad 2无法预览,显示the view has crashed! 按照官网的Q&A http://markdownpad.com/faq.htm ...
- winfrom中按钮文本&的显示问题/按钮快捷键设置问题
其实这个问题是因为“&”有特殊的意义-就是可以作为快捷键 第一种:Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加& ...
- windows下面composer安装yii2
1,安装composer "https://getcomposer.org/Composer-Setup.exe" 2,安装 composer-asset-plugin ,打开cm ...
- Python【第十篇】协程、异步IO
大纲 Gevent协程 阻塞IO和非阻塞IO.同步IO和异步IO的区别 事件驱动.IO多路复用(select/poll/epoll) 1.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coro ...
- Laravel框架——任务调度(cron)
准备: 在服务的/var/spool/cron/root文件中添加代码 cd /var/spool/cron/root 添加以下代码 * * * * * phppath 项目路径/artisan sc ...
- 在objc项目中使用常量的最佳实践
在objc项目中使用常量的最佳实践 之前,在在objc项目中使用常量中,使用c的预处理#define来设置常量.比如,可以做个头文件,然后在需要的类文件中import,使用常量. 但这不是最佳实践 ...
- 如何使用 Laravel Facades ?
Facade 布局是在面向对象编程中经常使用的一种软件设计布局方式.Facade 实际上是一种包括复杂函数库的类,提供了更加简洁易读的接口.Facade 布局还能为一组结构复杂.设计简陋的 API 提 ...
- python 大文件以行为单位读取方式比对
http://www.cnblogs.com/aicro/p/3371986.html 先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作.做了很多的尝试,最终看到了如 ...
- 重构第四天 : 用多态替换条件语句(if else & switch)
面相对象的一个核心基础就是多态,当你要根据对象类型的不同要做不同的操作的时候,一个好的办法就是采用多态,把算法封装到子类当中去. 重构前代码: public abstract class Custom ...