Android裁剪背景

时间:2011-07-21 20:24:50

标签: android background drawable crop

我的LinearLayout宽度设置为fill_parent,高度设置为wrap_content。现在我想从png文件中给它一个背景,但是以传统的方式进行操作会导致LinearLayout调整大小以显示整个背景而不是裁剪其他部分。

如何设置LinearLayout的背景,以便它不会调整大小?

由于

4 个答案:

答案 0 :(得分:31)

似乎只有使用ImageView并相应地设置scaleType参数才能实现此类目标。一个快速的解决方法是使用FrameLayout并将ImageView放在具有透明背景的另一个布局下。

代码:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/background" />

</FrameLayout>

答案 1 :(得分:6)

背景位图的默认行为是完全填充容器,并根据需要增大容器的水平和垂直尺寸。解决方案是创建可绘制的位图资源并更改重力。

检查以下链接并查找可能的重力值。您的视图应该只引用可绘制资源,您应该没问题。

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

答案 2 :(得分:1)

我通过继承LinearLayout并重写onMeasure(int,int)回调来解决这个问题,然后更新布局XML以使用我的新布局类型。我不能自由发布那些确切的代码,但我所做的是调用super.onMeasure(int,int)实现并检查测量的高度是否返回到我的背景图像的确切高度。如果是这样,我抓住所有子视图的测量高度,然后计算新的高度值并将其传递给setMeasuredDimension(int,int)

答案 3 :(得分:-2)

将此代码放在xml活动中,例如activity_main.xml

<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image" />