2012-05-21 18 views
6

3x3行の小さな四角形をアンドロイドxmlドロアブルで作成する方法を解明しようとしています。
これは本当に私が近い(2小さなrectsを、彼らが重なる)になっていない。xml drawableで複数の矩形を描く

<?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> 

答えて

1

documentation of Layer Listsを参照してください。

それはtopleftbottomrightは、アイテムのオフセットのための次元内の属性であることを、アップクリアされます:アイテム自体はそれの境界から配置する必要がありますどのくらいの親(レイヤリスト) 。

あなたのレイヤーリストは広い130 DPと高130 DPを言っている、とあなたはそこに3x3の長方形をしたいことがわかっている場合は、初のオフセットが

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

と次の(最初の行、第二のカラムでなければなりません):

top: 10 
left: 50 
bottom: 90 
right: 50 
+0

2行目 上部:50 左:10 底:50 右:90 三行 上部:90 左:10 底:10 右:90 – Lunf

6

問題の一部は、レイヤーリスト内の個々のアイテムがドロアブルの全体のサイズにスケーリングされることです。 the docsに記載されているように、bitmapの描画可能な小さな四角形で囲むことで回避できます。このような何かが働くかもしれません。まず、個別の描画可能として基本的な形状を定義します。

描画可能/ 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> 

(EDIT:あなたが上記の操作を行うことができれば、それはいいだろうが、残念ながら@Someoneコメントのどこかで指摘されているように、<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> 

私はこれをテストしていませんが、あなたはそれを微調整することができるはず:3210

その後は、個々の正方形をスケーリングしません層-リストを定義することができますあなたが望むものを得るために。重要なのは、スケーリングを取り除くことです。

+0

私はこのような私のディスプレイには何も表示されません。何か案は? – WOPR

+0

@ user1059096 - Hm。なぜそれが動作していないのかわかりません。 (実際には大きな問題が1つあります: ''タグが表示されるたびに間違っています: ''。 '' drawableは生のビットマップへの参照を必要とし、私はそれを '' drawableを参照するために使用しようとしていました。)しかし、その変更を行っても、(私が確認したように)動作しません。私はもう少し時間があるときにそれをもっと調べます。それは非常に奇妙です。 –

+0

**これは動作しません。**ビットマップはXMLシェイプをロードできません。その結果、エラーメッセージ 'には有効なsrc属性が必要です。したがって、形状のレイヤーからイメージを生成することは基本的なものでも不可能であるように見えます。 –

0

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

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

しかし、ScaleDrawablesはアニメーションを意図しているという事実に苦しんでいます。彼らは目に見えないほど小さくする0のレベルで開始するように見えます。また、XMLでレベルを設定することもできないようです。

コードでScaleDrawableのレベルを設定してライブできる場合は、試してみてください。

また、this questionを参照してください。