Come definire una forma circolare in un file disegnabile XML Android?


687

Ho dei problemi a trovare la documentazione delle definizioni delle forme in XML per Android. Vorrei definire un semplice cerchio pieno di un colore solido in un file XML per includerlo nei miei file di layout.

Purtroppo la Documentazione su android.com non copre gli attributi XML delle classi Shape. Penso che dovrei usare un ArcShape per disegnare un cerchio, ma non ci sono spiegazioni su come impostare la dimensione, il colore o l'angolo necessari per creare un cerchio da un arco.


3
Qui puoi leggere come creare una forma tracciabile: developer.android.com/guide/topics/resources/…
Mario Kutlev


La documentazione di Android Dev è stata migliorata da allora. Ora copre l' android:shapeelemento - Risorse disegnabili .
naXa,

Risposte:


1515

Questo è un semplice cerchio come disegnabile in 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
E come cambiare dinamicamente il colore?
Ankit Garg,

5
@AnkitGarg puoi applicare un filtro colore dal codice Java (vedi classe Drawable)
milosmns

7
Ho provato dped è stato distorto in una forma ovale. Per me, usando ptinvece risolto.
Tyler,

13
Non è necessario per sizein shapese successivamente si definisce una dimensione quadrata per la vista.
Ferran Maylinch,

2
La sua forma è ovale e non rotonda. Qualcuno può confermare ??
Tarun,

762

Imposta questo come sfondo della vista

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

inserisci qui la descrizione dell'immagine

Per un cerchio solido usare:

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

inserisci qui la descrizione dell'immagine

Solido con corsa:

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

inserisci qui la descrizione dell'immagine

Nota : per fare in modo che la ovalforma appaia come un cerchio, in questi esempi, o la tua vista che stai usando questa forma come sfondo dovrebbe essere un quadrato o devi impostare le proprietà heighte widthdel tag della forma su un valore uguale.


2
Bella soluzione. Ovviamente, l'ovale appare come un cerchio se la larghezza e l'altezza della vista sono uguali. Penso che ci fosse un modo per farlo apparire come un cerchio, indipendentemente dalle dimensioni della vista.
Ferran Maylinch,

2
@FerranMaylinch "Penso che ci fosse un modo per farlo apparire come un cerchio, indipendentemente dalle dimensioni della vista." Ho risolto questo problema usando un RelativeLayout avvolgendo sia un ImageView (con il cerchio come "src" disegnabile) con larghezza / altezza fisse che un TextView che avvolge un testo (ad esempio).
Michele,

Sto facendo la stessa identica cosa ma il cerchio è disegnato come ovale
Bugs Happen

E se ne avessimo bisogno per creare attorno a una visualizzazione di testo con colori dei bordi diversi in fase di esecuzione?
Anshul Tyagi,

@AnshulTyagi Credo che tu possa farlo chiamando yourView.getBackground()e impostando il colore manualmente. devi lanciarlo su un tipo appropriato come ShapeDrawable. Ci sono domande correlate su SO su questo.
M. Reza Nasirloo,

93

Codice per cerchia semplice

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

Guarda negli esempi di SDK per Android. Ci sono diversi esempi nel progetto ApiDemos:

/ ApiDemos / res / drawable /

  • black_box.xml
  • shape_5.xml
  • eccetera

Sarà simile a questo per un cerchio con un riempimento sfumato:

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


46

Puoi usare VectorDrawable come di seguito:

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

Il codice XML sopra riportato viene visualizzato come:

inserisci qui la descrizione dell'immagine


Ehi, sto avendo un'imbottitura tra cerchio e finestra. Mi puoi aiutare?
Ajeet

1
@Ajeet puoi cambiare la dimensione del viewport e puoi inserire il tuo percorso all'interno del gruppo e specificare la traduzione e la scala<group android:translateX="-10" android:translateY="15"><path ...
Boris Treukhov

2
@Riyas puoi spiegare la parte pathData? cosa implicano queste coordinate?
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
Cosa fanno <corners />in un ovale (che secondo me non ha angoli)?
Scott Biggs,

18

Se vuoi un cerchio come questo

inserisci qui la descrizione dell'immagine

Prova a utilizzare il codice seguente:

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

17

Ecco un semplice circle_background.xml per pre-materiale:

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

È possibile utilizzare con l'attributo 'android:background="@drawable/circle_background"nella definizione del layout del pulsante


+ aggiungi 'size' alla forma (e) (a seconda del caso d'uso).
TouchBoarder,

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>

inserisci qui la descrizione dell'immagine


4

Puoi provare questo -

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

Inoltre, puoi regolare il raggio del cerchio regolando android:thickness.

inserisci qui la descrizione dell'immagine


Questo è davvero carino! Ci vuole sicuramente un po 'di gioco poiché gli attributi non sono intuitivi. Sono riuscito a ottenere questo per visualizzare ogni volta un bel cerchio vuoto per un bordo. E puoi usare l'imbottitura per assicurarti che venga visualizzato l'intero cerchio.
Scott Biggs,

2

Non potevo tracciare un cerchio all'interno del mio Vincolo di layout per qualche motivo, non potevo usare nessuna delle risposte sopra.

Ciò che ha funzionato perfettamente è un semplice TextView con il testo che esce, quando si preme "Alt + 7":

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

Molto intelligente! Sono sicuro che qualcuno lo troverà utile.
Scott Biggs,

molto utile, fantastico ..
Mahbubur Rahman Khan

1

Puoi provare a usare questo

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

e non devi preoccuparti delle proporzioni di larghezza e altezza se lo usi per una visualizzazione di testo


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

una forma circolare in un file disegnabile XML Android

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

Immagine dello schermo

inserisci qui la descrizione dell'immagine


-22

Basta usare

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

26
E come posso impostarlo come SRC di un ImageView nel mio file di layout XML?
Janusz,

Questo non è direttamente applicabile per un codice layout xml
François Legrand,

1
questo in realtà funziona. Grazie :) val background = ShapeDrawable (OvalShape ()) background.paint.color = ContextCompat.getColor (holder.getView (). Context, R.color.green) val layers = arrayOf (background, resource !!) greenRoundIcon.setImageDrawable (LayerDrawable (livelli))
David

Non mi piace, ma funziona e mi aiuta, grazie
Pavel Shorokhov il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.