6

Android xml ドローアブルで 3x3 の小さな長方形の行を作成する方法を理解しようとしています。
これは本当に私を近づけていません(2つの小さな四角形ですが、それらは重なっています):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:left="20dp" android:top="20dp" android:right="25dp" android:bottom="25dp" >
        <shape android:shape="rectangle">
            <stroke android:width="1px" android:color="#fff" />
            <solid android:color="#00FF0000" />
            <corners android:radius="3dp" />
        </shape>
    </item>


    <item android:left="30dp" android:top="30dp" android:right="35dp" android:bottom="25dp" >
    <shape android:shape="rectangle">
            <stroke android:width="1px" android:color="#fff" />
            <solid android:color="#00FF0000" />
            <corners android:radius="3dp" />
            <size android:width="10dp"
                  android:height="10dp"/>
        </shape>
    </item>


</layer-list>
4

3 に答える 3

7

問題の一部は、レイヤー リスト内の個々のアイテムがドローアブルの全体のサイズに合わせてスケーリングされることです。docsで説明されているように、小さな正方形をbitmapドローアブルでラップすることでこれを回避できます。このようなものがうまくいくかもしれません。まず、基本的な形状を個別のドローアブルとして定義します。

drawable/square.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="1px" android:color="#fff" />
    <solid android:color="#00FF0000" />
    <corners android:radius="3dp" />
    <size android:width="10dp" android:height="10dp"/>
</shape>

(編集:上記のことができればいいのですが、残念ながら、@Someone Somewhereがコメントで指摘したように、<bitmap>タグ内からシェイプドローアブルを参照することはできません。正方形をこの残りの部分が機能するための実際のビットマップ グラフィック)。

次に、個々の正方形をスケーリングしないレイヤーリストを定義できます。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- first row -->
    <item android:left="20dp" android:top="20dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="35dp" android:top="20dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="50dp" android:top="20dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>

    <!-- second row -->
    <item android:left="20dp" android:top="35dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="35dp" android:top="35dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="50dp" android:top="35dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>

    <!-- third row -->
    <item android:left="20dp" android:top="50dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="35dp" android:top="50dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
    <item android:left="50dp" android:top="50dp">
        <bitmap android:src="@drawable/square" android:gravity="top|left" />
    </item>
</layer-list>

私はこれをテストしていないので、少しずれているかもしれませんが、必要なものを得るために微調整できるはずです. 重要なことは、スケーリングを取り除くことです。

于 2012-05-21T17:17:25.937 に答える
1

レイヤーリストのドキュメントを参照してください。

、、、およびはアイテムのオフセットのディメンションの属性であることが明確になります。つまり、topアイテム自体をその親(レイヤーリスト)の境界からどれだけ離す必要があるかです。leftbottomright

レイヤーリストが幅130dp、高さ130 dpであることがわかっていて、そこに3x3の長方形が必要な場合、最初のオフセットは次のようになります。

top: 10
left: 10
bottom: 90
right: 90

次の(最初の行、2番目の列):

top: 10
left: 50
bottom: 90
right: 50
于 2012-05-21T17:07:54.633 に答える
0

議論ですでに明らかになったように、ビットマップの使用は実際のビットマップに制限されています。他の (XML) ドローアブルはここでは使用できません。

ScaleDrawables は、適切なソリューションになるはずです。結果の境界ボックス内で位置を調整するために必要な属性を提供する必要があります。

ただし、ScaleDrawables はアニメーション用であるという問題があります。それらはレベル 0 から始まるように見えるため、目に見えないほど小さくなっています。また、XML でレベルを設定することはできないようです。

コード内で ScaleDrawables にレベルを設定することができる場合は、試してみてください。

また、この質問を参照してください。

于 2012-12-07T13:02:04.007 に答える