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

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,布局代码如下:

    <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,如下

    LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(27, 27);
    layout.addView(imageButton, layoutParam);  

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

解决方案二:

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

 <?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:

    <?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方式设置背景,均不会产生被拉伸的情况。

时间: 2024-10-12 17:34:39

android:background背景图片被拉伸问题的相关文章

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

ImageView中XML属性src和background的区别: background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸.src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对src起作用:bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放方式 如上所述,background设置的图片会跟View组件给定的长宽比例进行拉伸.举个例子, 36x36 px的图标

Android聊天背景图片变形解决方案

Android聊天背景图片变形,一般是由于键盘引起的(这个是自己调戏糖宝app中出现的问题,今天抽时间解决下).可以参看StackOverFlow解决的地址:http://stackoverflow.com/questions/5307264/how-to-prevent-soft-keyboard-from-resizing-background-image 我这里用的也是参考这里的方法: 解决方法很简单: 1.在AndroidManifest.xml文件里面的Activity配置:andro

Android之背景图片设置为重复而不是默认的拉伸

创建重复的背景图片 在drawable目录下创建一个repeat_bg.xml:  src是引用图片的名称 1 <?xml version="1.0" encoding="utf-8"?> 2 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" 3     android:src="@drawable/bg" 4     and

Android设置背景图片平铺

以LinearLayout为例,它提供的background属性将会将背景图片拉伸,相当难看.其实我们仅仅需做少量的改动就能够实现web编程中css背景图片的效果.来试试吧. 创建反复的背景图片 在drawable文件夹下创建一个repeat_bg.xml: <? xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/a

有关background 背景图片不能显示

首先有两个概念 绝对路径,从根目录为起点到你所在的目录: 相对路径,从一个目录为起点到你所在的目录. 例如:              ┍ A文件夹           C -|              ┕ B文件夹 绝对路径: C:\A文件夹 相对路径(如果你在B文件夹时): ..\B文件夹  ('..\'向上一级意思) 在实际操作过程中,相对地址和css是内联还是外联有关系的,这个问题在使用绝对地址时不存在. 内联时:{background-image: url(images/new_8.

【iOS开发-背景】关于按钮背景图片的拉伸

关于按钮背景图片拉伸与不拉伸的效果 拉伸的效果: 不拉伸的效果 拉伸的效果: 不拉伸的效果 拉伸原理 iOS开发中,有一个方法可以将图片按照指定的形式拉伸,拉伸方式为下图,一般拉伸部分都为0: 实现方式 新建一个UIImage的分类 为UIImage扩充一个方法+(UIImage )resizableImage:(NSString )imageName: 然后再按钮所在的ViewController里面设置按钮的背景 分类 @implementation UIImage (Extension)

ie8 background背景图片不显示问题

在chrome,FF可以显示,但是在ie8背景图片显示不出来 css改为如下可以正常显示: background: url(../images/goods.png) no-repeat !important;

android设置背景图片

首先准备你的背景图片 主要就是设置图片大小,一般设置为1088X612 .要保存成png格式.然后旋转图片等操作.这些工作可以由美图秀秀完成.系统自带的画图工具,功能太单一,使用不方便.ps又难以操作.所有推荐使用美图秀秀.最后一步是重命名.必须要以小写字母开头,否则会在R.java文件报错. 然后是将图片导入到你的IDE 如图,将你的图片拖拽到res目录下的drawable-hdpi.然后选择默认选项即可. 最后就是使用背景图片的设置 如上图,将红色框内的文字复制到你的布局文件即可

解决IE8浏览器下背景图片无法拉伸(铺满)的问题

IE8浏览器不兼容这种写法: 1 body{ 2 background-image:url(1.jpg); 3 background-size:cover; 4 background-repeat:no-repeat; 5 } 6 7 <body> 8 </body> 网上找了很多方法,包括使用滤镜什么的都不管用,后来发现其实很简单. 解决方法:使用<img>标签即可,如下: 1 img { 2 position: fixed; 3 width: 100%; 4 hei