文档章节

解决android:background背景图片被拉伸问题

JayPark不作死
 JayPark不作死
发布于 2014/09/29 14:15
字数 504
阅读 3735
收藏 1

ImageView中XML属性src和background的区别:

background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用。

此外:scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放方式


如上所述,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 plaincopy在CODE上查看代码片派生到我的代码片

  1. <LinearLayout android:gravity="center" android:layout_width="96px" android:layout_height="75px"  >  

  2.     <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/toolbar_bg"/>      

  3. </LinearLayout>  


实际情况是,我们得到的ImageButton的大小是 33x27,很明显width被拉伸了,这是我们不想看到的情况。

解决方案一:

代码中动态显式设置ImageButton的layout_width和layout_width,如下 

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(2727);  

  2. layout.addView(imageButton, layoutParam);  

不过,事实上我们并不希望在代码存在“硬编码”的情况。

解决方案二:

在你通过setBackgroundResource()或者在xml设置android:background属性时,将你的background以XML Bitmap的形式定义,如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <bitmap xmlns:android="http://schemas.android.com/apk/res/android"  

  3.     android:id="@id/toolbar_bg_bmp"  

  4.     android:src="@drawable/toolbar_bg"  

  5.     android:tileMode="disabled" android:gravity="top" >  

  6. </bitmap>  

调用如下:

    imageButton.setBackgroundResource(R.drawable.toolbar_bg_bmp)

或者

    <ImageButton ...  android:background="@drawable/toolbar_bg_bmp" ... />

若背景图片有多种状态,还可参照toolbar_bg_selector.xml:

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >  

  3.     <item android:state_pressed="true" >  

  4.         <bitmap android:src="@drawable/toolbar_bg_sel" android:tileMode="disabled" android:gravity="top" />  

  5.     </item>  

  6.     <item >  

  7.         <bitmap android:src="@drawable/toolbar_bg" android:tileMode="disabled" android:gravity="top" />  

  8.     </item>  

  9. </selector>  



如此,不管是通过代码方式setBackgroundResource()或XML android:background方式设置背景,均不会产生被拉伸的情况。


本文转载自:http://blog.csdn.net/oathevil/article/details/23707359

JayPark不作死
粉丝 15
博文 51
码字总数 13622
作品 0
苏州
程序员
私信 提问
Android画布和图形绘制---Canvas and Drawables(五)

Nine-patch NinePatchDrawable图形是可拉伸的位图图片,Android系统会根据View对象中的内容来自动的调整背景图片。使用NinePatch图片的一个例子就是标准Android按钮的背景图片---按钮必须根据...

长平狐
2012/10/16
800
0
安卓开发实现背景图片应用于各种尺寸的屏幕且不失真

【原创】安卓开发中,无论是背景图还是按钮图或者其他图,都不希望随着移动设备的改变而失真,如果想要实现背景图片应用于各种尺寸的屏幕且不失真,需要先对图片进行一下处理。 在这里,我使...

bluecoffee
2014/07/04
3.3K
2
android自定义button样式

在Android开发应用中,默认的Button是由系统渲染和管理大小的。而我们看到的成功的移动应用,都是有着酷炫的外观和使用体验的。因此,我们在开发产品的时候,需要对默认按钮进行美化。在本篇...

sumpower
2014/02/25
5.1K
0
android中src和background区别

ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用...

三只脚的猪
2014/03/05
281
0
android的Imageview的src和background

android中src和background区别 ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前...

michaelpan
2014/12/17
437
1

没有更多内容

加载失败,请刷新页面

加载更多

 介绍一款优秀的通用管理权限快速开发框架

这是一套以权限管理为主的轻量化快速开发框架,配置有流程、专业表单、权限、app、企业微信等基础功能模块,在开发通用软件的效率上很有优势。 软件平台常用研发需求分析 《那些年我们一起做...

我想造火箭
38分钟前
12
0
ElasticDL:蚂蚁金服开源基于 TensorFlow 的弹性分布式深度学习系统

9 月 11 日,蚂蚁金服在2019谷歌开发者大会上海站上开源了 ElasticDL 项目,这是业界首个基于 TensorFlow 实现弹性深度学习的开源系统。 开源地址为:https://github.com/sql-machine-learni...

SOFAStack
45分钟前
14
0
CSS--渐变

一、什么是渐变 多种颜色平缓变化的一种显示效果 二、渐变的主要元素 色标:一种颜色,以及出现的位置,一个渐变至少两种色标 三、渐变的分类 1、线性渐变 以直线的方式来填充渐变色 backgr...

wytao1995
今天
13
0
Java通过模板生成PDF再转换为图片

1、添加maven依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.1</version></dependency><dependency> <g......

醉美閑聖
今天
9
0
SpringBoot-MVC RequestBody中LocalDateTime的自适应配置

请求的json报文中可能会出现 一下几种: ['2019-01-01','2019-01-01 12:03:34','20190101120334'] 但是接收的Request实体类日期字段是LocalDateTime类型 LocalDateTime applyDate; 希望的情况......

汉堡OSC
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部