0

我面临一个问题。在一个活动中,我有两个线性布局。第一个的高度是 300dp,第二个的高度是 150dp。我从 1024 X 615 资源图像创建了一个 BitmapDrawable。但问题是当我通过 setBackground() 方法使用 BitmapDrawable 作为背景时,BitmapDrawable 在两种布局中显示相同的长度,其中第一个布局背景图像的长度应该是第二个的两倍。布局之间有一些空间,但图像长度相同。

这是xml代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:paddingBottom="@dimen/activity_vertical_margin"
            tools:context=".MainActivity"
            android:orientation="vertical">


<LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="300dp"
            android:id="@+id/rel1"
            android:orientation="vertical"
    >

        </LinearLayout>

<TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Divider"
            android:id="@+id/textView"
            android:gravity="center_horizontal"/>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:id="@+id/ln2"
    >

</LinearLayout>

onCreate() 中的代码

    Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.section_background);
    BitmapDrawable backGroundBitmap = new BitmapDrawable(getResources(), background);
    BitmapDrawable backGroundBitmap2 = new BitmapDrawable(getResources(), background);
    findViewById(R.id.ln2).setBackground(backGroundBitmap);
    findViewById(R.id.rel1).setBackground(backGroundBitmap);

这是输出的屏幕截图:输出

这是预期的输出:预期的

如果我在 xml 中声明背景资源,则输出符合预期。如果我在 2 布局中分别使用“backGroundBitmap”和“backGroundBitmap2”,则输出符合预期。

  findViewById(R.id.ln2).setBackground(backGroundBitmap);
  findViewById(R.id.rel1).setBackground(backGroundBitmap2);

任何人都可以解释为什么会发生这种情况。提前致谢。

4

1 回答 1

0

为此,您需要使用NinePatchDrawable,以便它将调整其大小以适合视图。引用文档:

NinePatchDrawable
=================

A resizeable bitmap, with stretchable areas that you define.
This type of image is defined in a .png file with a special format.

访问Draw-9 Patch以获取有关如何创建图像的更多具体信息。

于 2015-09-07T02:29:26.417 回答