web-dev-qa-db-ja.com

Android=

現在、コード内のカスタムビューでキャンバスにいくつかの円を描いています。円は静的であり、変化しません。コードをクリーンアップするために、xmlのShapeDrawableを使用してそれらを描画したいと思います。ユーザーが選択できるさまざまなドロウアブルを用意するため、コードでこれを行いたくありません。 3つまたは4つのXMLドローアブルを持っていることは、私にとって非常にすてきなようです。

ShapeDrawableを使用してxmlに1つの円を作成しましたが、xmlに複数の図形を追加できません。

ShapeDrawableを使用してxmlドキュメントに複数の図形を追加するにはどうすればよいですか。

49
skyfoot

Layer-listを使用して複数の形状をxmlファイルに追加するソリューションを見つけたと思います。私はまだこれを試していませんが、形状が配列インデックスの順序で描画されるため、これは私が望むものとまったく同じではないようです。

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item>
      <shape>
         <solid Android:color="#FFF8F8F8" />
      </shape>
   </item>
   <item Android:top="23px">
      <shape>
         <solid Android:color="#FFE7E7E8" />
      </shape>
   </item>
</layer-list>

ブログ投稿

Androidドキュメント

43
skyfoot

真ん中に白い数字の72が入った1ピクセルの黒い境界線で塗りつぶされた赤い円をどのようにしたかを以下に示します。

Res\drawableにXMLファイルを作成し、適切な名前を付けます(例:red_circle_black_border.xml)

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="oval">
            <solid Android:color="@Android:color/black" />
        </shape>
    </item>
    <item Android:top="1dp" Android:left="1dp" Android:right="1dp" Android:bottom="1dp">
        <shape Android:shape="oval">
            <solid Android:color="@Android:color/red" />
        </shape>
    </item>
</layer-list>

次に、レイアウトで使用するには、次のように宣言します。

<TextView
    Android:text="72"
    Android:textSize="14dp"
    Android:textStyle="bold"
    Android:background="@drawable/red_circle_black_border" 
    Android:layout_width="22dp"
    Android:layout_height="22dp"
    Android:gravity="center_vertical|center_horizontal"
    Android:textColor="@Android:color/white" />

明らかに、必要に応じてtextSizeとlayout_width/heightを変更します:-)

84
Kenton Price