324 votes

Comment faire une ligne en pointillé/en pointillé dans Android ?

J'essaie de faire une ligne pointillée. Je l'utilise pour l'instant pour une ligne pleine :

LinearLayout divider = new LinearLayout( this );
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, 2 );
divider.setLayoutParams( params );
divider.setBackgroundColor( getResources().getColor( R.color.grey ) );

J'ai besoin de quelque chose comme ça, mais en pointillé au lieu de solide. J'aimerais éviter de faire des centaines de mises en page alternant entre une mise en page transparente et une mise en page solide.

673voto

embo Points 1839

Sans code java :

drawable/dotted.xml :

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

    <stroke
       android:color="#FF00FF"
       android:dashWidth="10px"
       android:dashGap="10px"
       android:width="1dp"/>
</shape>

view.xml :

<ImageView
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:src="@drawable/dotted"
    android:layerType="software" />

Effet : enter image description here

0 votes

Cela peut également être fait en utilisant simplement View au lieu de ImageView en utilisant Android:background, n'est-ce pas ?

26 votes

Je ne comprends pas pourquoi j'obtiens une ligne sans espace sur mon téléphone, alors que je vois les espaces dans la présentation graphique d'Eclipse.

80 votes

Peu importe, j'ai trouvé la solution ici : stackoverflow.com/questions/10843402/ Il suffit de régler le type de couche sur logiciel : Android:layerType="software"

240voto

siliconeagle Points 2292

L'effet de trajectoire est défini sur l'objet peinture

Paint fgPaintSel = new Paint();
fgPaintSel.setARGB(255, 0, 0,0);
fgPaintSel.setStyle(Style.STROKE);
fgPaintSel.setPathEffect(new DashPathEffect(new float[] {10f,20f}, 0f));

vous pouvez créer toutes sortes de motifs en pointillés en fournissant plus de chiffres dans le tableau int[] ; il spécifie les ratios de tiret et d'espace. Il s'agit d'une ligne simple, en pointillés égaux.

2 votes

J'ai copié et collé ce code directement, mais rien ne s'est produit. Dois-je écrire du code supplémentaire pour que cela fonctionne ?

0 votes

Je veux faire une demande pour plusieurs couleurs. Une autre solution ?

65voto

Sargam Points 239

Création d'une ligne en pointillé à l'aide de XML.
Créez un fichier xml dans le dossier drawable et donnez cet arrière-plan à l'élément auquel vous voulez donner une bordure en pointillés.

Création d'un arrière-plan XML "dashed_border" :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="#ffffff" />
            <stroke
                android:dashGap="5dp"
                android:dashWidth="5dp"
                android:width="1dp"
                android:color="#0000FF" />
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
        </shape>
    </item>
</layer-list>

J'ajoute cet arrière-plan à l'article :

<Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/dashed_border"/>

0 votes

Si vous avez besoin d'un rayon pour les coins, il suffit d'ajouter <corners android:radius="5dp" /> à votre forme. Voir stackoverflow.com/a/41940609/1000551 pour plus d'informations

3 votes

Je pense que la liste des couches est inutile pour un seul élément. J'ai utilisé le <shape> comme élément racine et cela fonctionne de la même manière.

43voto

tier777 Points 11

Créer le xml (view_line_dotted.xml) :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:bottom="-1dp"
            android:left="-1dp"
            android:right="-1dp"
            android:top="0dp">

            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="#ffff0017"
                    android:dashGap="3dp"
                    android:dashWidth="1dp" />

                <solid android:color="@android:color/transparent" />

                <padding
                    android:bottom="10dp"
                    android:left="10dp"
                    android:right="10dp"
                    android:top="10dp" />
            </shape>
        </item>
</layer-list>

Définissez comme arrière-plan de votre vue :

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@drawable/view_line_dotted" />

0 votes

Pouvez-vous l'expliquer ?

1 votes

Merci, l'indice est <item android:bottom="-1dp" android:left="-1dp" android:right="-1dp" > si vous voulez une ligne horizontale de 1dp d'épaisseur.

0 votes

Génial. Cela fonctionne presque sans problème pour moi. Le seul changement dont j'ai eu besoin a été de modifier la balise stroke ; 2dp width et 4dp dashGap.

28voto

Tony Vu Points 16

Ce que j'ai fait lorsque j'ai voulu dessiner une ligne en pointillé, c'est de définir une drawable dash_line.xml :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" >
<stroke
    android:dashGap="3dp"
    android:dashWidth="2dp"
    android:width="1dp"
    android:color="@color/black" />
</shape>

Et ensuite, dans la mise en page, il suffit de définir une vue avec un arrière-plan en tant que ligne de fuite . Note à inclure Android:layerType="software" sinon cela ne fonctionnera pas.

<View
            android:layout_width="match_parent"
            android:layout_height="5dp"
            android:background="@drawable/dash_line"
            android:layerType="software" />

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