10

LayerDrawable(XMLではlayer-listとして定義されています)を使用して、複数の形状のドローアブルを相互にレイヤー化しようとしています。レイアウトの背景として使用されます。

Androidガイド(LayerList用)には次のように書かれています。

デフォルトでは、すべての描画可能なアイテムは、含まれているビューのサイズに合わせて拡大縮小されます。したがって、画像をレイヤーリストのさまざまな位置に配置すると、ビューのサイズが大きくなり、一部の画像が適切に拡大縮小される場合があります。リスト内のアイテムのスケーリングを回避するには、<bitmap> 要素内の<item>要素を使用してドローアブルを指定し、「中心」などのスケーリングされないものに重力を定義します。

図形を拡大縮小したくないのですが、bitmapタグで正しくラップする方法がわかりません。次のようにするとエラーが発生します。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:src="@drawable/layer_one"
            android:gravity="center" />
    </item>
    <item>
        <bitmap
            android:src="@drawable/layer_two"
            android:gravity="center" />
    </item>
    <item>
        <bitmap
            android:src="@drawable/layer_three"
            android:gravity="center" />
    </item>
    <item>
        <bitmap
            android:src="@drawable/layer_four"
            android:gravity="center" />
    </item>
</layer-list>

文句を言う:

バイナリXMLファイルの行#25:<bitmap>有効なsrc属性が必要です

ドローアブルの1つの例(例:res / drawable / layer_one.xml):

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

<!--  res/drawable/layer_one.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#FFFFFF"/>
    <corners
        android:bottomRightRadius="15dp"
        android:bottomLeftRadius="15dp"
        android:topLeftRadius="15dp"
        android:topRightRadius="15dp" />
</shape>

Androidサイトで使用されている例では、XMLで定義された形状ではなく、画像を描画可能として使用しています(私のエラーはこれらに固有であり、どこかでばかげた間違いを犯していないことは言うまでもありません)。手がかりをいただければ幸いです。


ドローアブルリソース
の使用 この質問の回答は、ビットマップのsrcとしてXMLドローアブルを使用できないことを示しています。質問のタイトルを修正して、を使用せずに図形が拡大縮小されないようにする(これにより、コンテナビューのサイズを変更する)方法を尋ねますかbitmap、それとも実際の画像リソースを使用する必要がありますか?


目的の結果の画像を追加しました。通常の長方形で塗りつぶされた形状などの背景を作成し、その上にさらに多くの形状の描画可能オブジェクトを重ねることができます(ここでは3つの楕円があります)。左側は上と左のオフセットが許可されている理想的な場所であり、右側はすべての形状がデフォルトの位置に移動するだけの場所です。

ここに画像の説明を入力してください

4

1 に答える 1

2

はい、(私の以前の回答によると)ビットマップにxmlドローアブルを使用することはできません。ビルドは問題ありませんが、アプリを実行するとクラッシュします。

ステートメントに関してはuse a <bitmap> element inside the <item> element、レイヤーリストでさらに形状を定義できることを意味し、それが目的です。ビットマップを定義することもできますが、ビットマップには、(xmlではなく)ソリッドイメージを参照するsrc値が必要です。

できることは、layer_one、layer_two、およびその他のレイヤーのxmlをlayer_listxmlに挿入することです。例えば:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <shape
            android:shape="rectangle" >
            <solid android:color="#FFFFFF" />

            <corners
                android:bottomLeftRadius="15dp"
                android:bottomRightRadius="15dp"
                android:topLeftRadius="15dp"
                android:topRightRadius="15dp" />
        </shape>
    </item>

    <!-- and so on with your other shapes -->

</layer-list>

それがうまくいくことを願っています:)

于 2012-04-07T18:22:23.877 に答える