798 votes

Comment définir une forme de cercle dans un fichier dessinable Android XML ?

J'ai quelques problèmes pour trouver la documentation des définitions des formes en XML pour Android. Je voudrais définir un simple cercle rempli d'une couleur unie dans un fichier XML pour l'inclure dans mes fichiers de mise en page.

Malheureusement, la documentation sur Android.com ne couvre pas les attributs XML des classes Shape. Je pense que je devrais utiliser un ArcShape pour dessiner un cercle, mais il n'y a aucune explication sur la façon de définir la taille, la couleur ou l'angle nécessaire pour faire un cercle à partir d'un arc.

3 votes

Vous pouvez lire ici comment créer des formes dessinables : developer.Android.com/guide/topics/resources/

0 votes

Vous pouvez obtenir le cercle xml à partir d'ici developer.Android.com/samples/WearSpeakerSample/res/drawable/

0 votes

La documentation Android Dev a été améliorée depuis lors. Elle couvre désormais android:shape élément - Ressources pouvant être dessinées .

1722voto

Arefin Points 2144

Il s'agit d'un simple cercle comme élément à dessiner dans 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>

63 votes

Et comment changer la couleur de façon dynamique ?

6 votes

@AnkitGarg vous pouvez appliquer un filtre de couleur à partir du code Java (voir la classe Drawable).

8 votes

J'ai essayé dp et il a été déformé en une forme ovale. Pour moi, utiliser pt au lieu de le réparer.

846voto

Pedram Points 537

Définissez ceci comme votre fond d'écran

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

enter image description here

Pour une utilisation en cercle solide :

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

enter image description here

Solide avec une attaque :

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

enter image description here

Note : Pour faire le oval apparaît comme un cercle, dans ces exemples, soit la vue que vous utilisez comme arrière-plan de cette forme doit être un carré, soit vous devez définir l'attribut height y width de la balise shape à une valeur égale.

2 votes

Belle solution. Bien sûr, l'ovale apparaît comme un cercle si la largeur et la hauteur de la vue sont les mêmes. Je pense qu'il y avait un moyen de le faire apparaître comme un cercle quelle que soit la taille de la vue.

2 votes

@FerranMaylinch "Je pense qu'il y avait un moyen de le faire apparaître comme un cercle quelle que soit la taille de la vue." J'ai résolu cela en utilisant un RelativeLayout enveloppant à la fois une ImageView (avec le cercle comme drawable "src") avec une largeur/hauteur fixe et une TextView qui enveloppe un texte (par exemple).

0 votes

Je fais exactement la même chose, mais le cercle est dessiné comme un ovale.

103voto

Ravi Makvana Points 2759

Code pour Simple circle

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

51voto

Riyas PK Points 1144

Vous pouvez utiliser VectorDrawable comme ci-dessous :

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

Le xml ci-dessus est rendu par :

enter image description here

0 votes

Hey, j'ai un padding entre le cercle et le viewport. Pouvez-vous m'aider ?

1 votes

@Ajeet vous pouvez changer la taille du viewport et vous pouvez mettre votre chemin dans le groupe et spécifier la traduction et l'échelle. <group android:translateX="-10" android:translateY="15"><path ...

2 votes

@Riyas pouvez-vous expliquer la partie pathData ? ce que ces coordonnées impliquent ?

46voto

goosemanjack Points 339

Regardez dans les échantillons du SDK Android. Il y a plusieurs exemples dans le projet ApiDemos :

/ApiDemos/res/drawable/

  • boîte_noire.xml
  • shape_5.xml
  • etc.

Cela ressemblera à ceci pour un cercle avec un remplissage en dégradé :

<?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"/>
</shape>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X