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

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

时间: 2024-08-04 14:56:59

解决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

设置背景图片的两种方式,并解决手机端背景图片高度自适应问题

1 设置背景图片的两种方式: 方式一: <img src="../img/10.jpg"/ class="back" id="Background"> .back{ position: fixed; width: 100%; height: 100%; display: block; z-index: -100; } 方式二:div class="body" id="Background">

BitmapFactory.Options解决Android加载图片内存溢出的问题

BitmapFactory.Options解决Android加载图片内存溢出的问题 1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直

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

解决Android中RadioButton图片和文本居中及底部经常被工具烂覆盖掉内容

1.图片和文本居中,只需要如下设置即可 <RadioButton android:id="@+id/myid" style="@style/tab_bottom" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" android:background=&qu

有关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)