Android XMLドローアブルファイルで円を定義する方法は?


687

AndroidのXMLでの形状の定義のドキュメントを見つけるのにいくつか問題があります。レイアウトファイルに含めるために、XMLファイルで単色で塗りつぶされた単純な円を定義したいと思います。

残念なことに、android.comのドキュメントには、ShapeクラスのXML属性は含まれていません。円の描画にはArcShapeを使用する必要があると思いますが、円弧から円を作成するために必要なサイズ、色、または角度の設定方法についての説明はありません。


3
ここでは、シェイプの描画可能の作成方法について読むことができます。developer.android.com/guide/topics/resources/...
マリオKutlev

ここからサークルXMLを取得することができますdeveloper.android.com/samples/WearSpeakerSample/res/drawable/...
シャハブラウフ

それ以降、Android Devドキュメントは改善されました。現在は、android:shape要素描画可能リソースをカバーしています。
naXa 2018

回答:


1513

これは、Androidのドローアブルとしての単純な円です。

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

   <solid 
       android:color="#666666"/>

   <size 
       android:width="120dp"
        android:height="120dp"/>
</shape>

51
そして、動的に色を変えるには?
Ankit Garg、2014

5
@AnkitGarg Javaコードからカラーフィルターを適用できます(
Drawable

7
試してみたところdp、楕円形に歪んでいました。私にとっては、pt代わりにそれを修正して使用しました。
タイラー

13
後でビューの正方形サイズを定義する場合はsize、の必要はありませんshape
Ferran Maylinch 2015年

2
その形状は楕円形であり、円形ではありません。誰でも確認できますか?
Tarun

762

これをビューの背景として設定します

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <stroke
        android:width="1dp"
        android:color="#78d9ff"/>
</shape>

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

黒丸を使用する場合:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="#48b3ff"/>
</shape>

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

ストローク付きのソリッド:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#199fff"/>
    <stroke
        android:width="2dp"
        android:color="#444444"/>
</shape>

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

ovalこれらの例では、図形を円として表示するには、この図形を背景として使用しているビューが正方形であるか、shapeタグのプロパティheightwidthプロパティを同じ値に設定する必要があります。


2
素晴らしい解決策。もちろん、ビューの幅と高さが同じであれば、楕円は円として表示されます。ビューのサイズに関係なく、それを円として表示する方法があったと思います。
Ferran Maylinch、2016

2
@FerranMaylinch「ビューのサイズに関係なく、円として表示する方法があったと思います。」これを解決するには、RelativeLayoutを使用して、固定の幅/高さのImageView(円が「src」ドローアブルである)と、テキストを(たとえば)ラップするTextViewの両方をラップします。
ミシェル、

私はまったく同じことをしていますが、円は楕円形で描かれています
Bugs Happen

実行時に境界線の色が異なるテキストビューの周りに作成する必要がある場合はどうなりますか?
Anshul Tyagi 2017

@AnshulTyagi yourView.getBackground()色を手動で呼び出して設定することでそれができると思います。のような適切な型にキャストする必要がありますShapeDrawable。これについては、SOに関連する質問があります。
M. Reza Nasirloo 2017年

93

単純な円のコード

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
        <solid android:color="#9F2200"/>
        <stroke android:width="2dp" android:color="#fff" />
        <size android:width="80dp" android:height="80dp"/>
</shape>

46

Android SDKサンプルをご覧ください。ApiDemosプロジェクトにはいくつかの例があります。

/ ApiDemos / res / drawable /

  • black_box.xml
  • shape_5.xml

グラデーションで塗りつぶされた円の場合、次のようになります。

<?xml version = "1.0" encoding = "utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android" android:shape = "oval">
    <gradient android:startColor = "#FFFF0000" android:endColor = "#80FF00FF"
            android:angle = "270" />
</形状>


46

以下のようにVectorDrawableを使用できます。

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="200dp"
    android:viewportHeight="64"
    android:viewportWidth="64">

    <path
        android:fillColor="#ff00ff"
        android:pathData="M22,32
        A10,10 0 1,1 42,32
        A10,10 0 1,1 22,32 Z" />
</vector>

上記のxmlは次のようにレンダリングされます。

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


ねえ、私はサークルとビューポートの間のパディングを持っています。あなたは私を助けることができます?
Ajeet 2017

1
@Ajeetビューポートのサイズを変更し、グループ内にパスを配置して、変換とスケールを指定できます<group android:translateX="-10" android:translateY="15"><path ...
Boris Treukhov

2
@RiyasはpathData部分を説明できますか?これらの座標は何を意味しますか?
Darshan Miskin

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

    <!-- fill color -->
    <solid android:color="@color/white" />

    <!-- radius -->
    <stroke
        android:width="1dp"
        android:color="@color/white" />

    <!-- corners -->
    <corners
        android:radius="2dp"/>
</shape>

1
<corners />楕円形で何をするのですか?(私の考えでは、角はありません)?
Scott Biggs

17

プレマテリアルの簡単なcircle_background.xmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="@color/color_accent_dark" />
        </shape>
    </item>
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/color_accent" />
        </shape>
    </item>
</selector>

'android:background="@drawable/circle_background"ボタンのレイアウト定義の属性で使用できます


+形状に「サイズ」を追加します(ユースケースによって異なります)。
TouchBoarder

17

このようなサークルが必要な場合

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

以下のコードを使用してみてください:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="2"
    android:useLevel="false" >
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1dp"
        android:color="@android:color/darker_gray" />
</shape>

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

    <stroke
        android:width="10dp"
        android:color="@color/white"/>

    <gradient
        android:startColor="@color/red"
        android:centerColor="@color/red"
        android:endColor="@color/red"
        android:angle="270"/>

    <size 
        android:width="250dp" 
        android:height="250dp"/>
</shape>

7

res / drawble / circle_shape.xml

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

        <shape android:shape="oval">
            <solid android:color="#e42828"/>
            <stroke android:color="#3b91d7" android:width="5dp"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

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


4

あなたはこれを試すことができます-

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="700"
    android:thickness="100dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

また、を調整して、円の半径を調整できますandroid:thickness

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


いいね!属性は直感的ではないため、確かに多少の操作が必要です。私はこれをなんとかして境界線に素敵な空の円を毎回表示するようにしました。また、パディングを使用して、円全体が表示されるようにすることができます。
Scott Biggs

2

なんらかの理由でConstraintLayout内に円を描くことができませんでした。上記の答えをどれも使用できませんでした。

完全に機能したのは、「Alt + 7」を押すと表示されるテキストを含む単純なTextViewです。

 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#0075bc"
            android:textSize="40dp"
            android:text="•"></TextView>

非常に賢い!きっと誰かがこれが役に立つと思うでしょう。
Scott Biggs

非常に便利、すばらしい..
Mahbubur Ra​​hman Khan

1

これを使ってみることができます

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

<item>
    <shape
        android:innerRadius="0dp"
        android:shape="ring"
        android:thicknessRatio="2"
        android:useLevel="false" >
        <solid android:color="@color/button_blue_two" />
    </shape>
</item>

これをテキストビューに使用している場合は、幅と高さのアスペクト比を気にする必要はありません


0
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/text_color_green"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

0

Android XMLドローアブルファイルの円形状

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1.5dp"
        android:color="@android:color/holo_red_light" />
    <size
        android:width="120dp"
        android:height="120dp" />
</shape>

スクリーンショット

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


-23

使うだけ

ShapeDrawable circle = new ShapeDrawable( new  OvalShape() );

26
そして、それをXMLレイアウトファイルのImageViewのソースとしてどのように設定できますか?
Janusz

これは、XMLレイアウトコードのために直接適用することはできない
フランソワ・ルグラン

1
これは実際に機能します。おかげで:) val background = ShapeDrawable(OvalShape())background.paint.color = ContextCompat.getColor(holder.getView()。context、R.color.green)val layer = arrayOf(background、resource !!)greenRoundIcon.setImageDrawable (LayerDrawable(layers))
David

とても嫌いですが、
うまくいき
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.