Comment créer une flèche orientée vers la droite (chevron) en utilisant des formes XML dans android? [fermé]

comment créer une flèche orientée vers la droite en utilisant des formes xml dans android comme ceci??enter image description here

17
demandé sur Bhargav Rao 2014-07-13 17:11:33

4 réponses

j'ai eu un problème similaire. Voici comment je l'ai résolu:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="@android:color/transparent"/>
            <size android:width="2dp" android:height="50dp"/>
        </shape>
    </item>

    <item android:bottom="20dp">
        <rotate
            android:fromDegrees="-45"
            android:toDegrees="45">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/black"/>
                <corners
                    android:radius="1dp"
                    android:bottomRightRadius="0dp"
                    android:bottomLeftRadius="0dp"/>
            </shape>
        </rotate>
    </item>

    <item android:top="20dp">
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45">
            <shape android:shape="rectangle">
                <solid android:color="@android:color/black"/>
                <corners
                    android:radius="1dp"
                    android:topRightRadius="0dp"
                    android:topLeftRadius="0dp"/>
            </shape>
        </rotate>
    </item>
</layer-list>

le premier élément est une forme vide pour étendre le dessin. Ensuite, j'ai utilisé 2 rectangles. Chacun d'eux a 2 côtés arrondis.

vous devez utiliser ce drawable via un ImageView:

<ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:src="@drawable/arrow"
    android:contentDescription="@string/arrow_descriptor"/>

Voici le résultat:

arrow example

Remarque: AndroidStudio ne rend pas différentes tailles de coin, mais il apparaît correctement sur les appareils.

53
répondu Simas 2015-03-08 10:53:55

pas besoin d'écrire votre propre XML, il y a un chevron de conception de matériel standard.

dans Android Studio, cliquez sur File -> New ->Vector Asset, puis cliquez sur l'icône (Bouton avec le logo Android) et recherchez "Flèche".

Sélectionnez la flèche que vous voulez, il sera ajouté à votre projet. Vous pouvez ouvrir le fichier XML et modifier les dimensions et la couleur si nécessaire.

enter image description here

enter image description here

enter image description here

10
répondu Martin Konicek 2018-09-09 09:57:31

il n'est pas possible de créer une telle forme en utilisant du xml étirable seulement ( Voir la réponse par user3249477), si vous voulez créer une telle forme par programmation, soit vous créez un dessin personnalisé ou une vue. Voici le code de la forme de la flèche droite. (La couleur et le diamètre peuvent être configurés en xml en utilisant styleable )

package com.kiriyard.stackoverflow24723040.views;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.util.AttributeSet;
import android.view.View;

public class ArrowView extends View {



    private Paint arrowPaint;
    private Path arrowPath;
    private int arrowColor = 0xFF888888;
    private float density;
    private int diameter = 25, diameter_calc, radius_calc;

    public ArrowView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        stuff();
    }

    public ArrowView(Context context, AttributeSet attrs) {
        super(context, attrs);
        stuff();
    }

    public ArrowView(Context context) {
        super(context);
        stuff();
    }

    private void stuff() {

        //Getting density "dp"
        density = getContext().getResources().getDisplayMetrics().scaledDensity;
        //Calculating actual diameter
        diameter_calc = (int) density * diameter;
        radius_calc = diameter/2;

        //Creating paint
        arrowPaint = new Paint();
        arrowPaint.setAntiAlias(true);
        arrowPaint.setColor(arrowColor);

        //Initialize path
        arrowPath = new Path();

        this.setWillNotDraw(false);
    }

    private int startX,startY, currentX, currentY;

    protected void onDraw(Canvas c) {

        startX = c.getWidth();
        startY = c.getHeight()/2;

        c.rotate(-45, startX, startY);

        arrowPath.reset();
        currentX = startX;
        currentY = startY;
        //Move to right end side center of the canvas
        arrowPath.moveTo(currentX,currentY);
        //Lets move up
        currentY = radius_calc;
        arrowPath.lineTo(currentX, currentY);
        //Now draw circle
        currentX-=radius_calc;
        arrowPath.addCircle(currentX, radius_calc, radius_calc, Direction.CCW);
        currentX-=radius_calc;

        arrowPath.lineTo(currentX,currentY);
        // Go to inner side center point
        currentX = startX - diameter_calc;
        currentY = startY - diameter_calc;
        arrowPath.lineTo(currentX,currentY);
        // Go left
        currentX = startX - startY + radius_calc;
        arrowPath.lineTo(currentX, currentY);       
        //Draw circle
        currentY+=radius_calc;
        c.drawCircle(currentX, currentY, radius_calc, arrowPaint);
        currentY+=radius_calc;
        arrowPath.lineTo(currentX, currentY);
        //Go to start
        arrowPath.lineTo(startX, startY);

        c.drawPath(arrowPath, arrowPaint);
    }

}

Capture d'écran

Arrow Screenshot

c'est une de la ! ... .. l'image dessinable est plus facile façon.

4
répondu Apurv Kiri 2017-05-23 12:03:02

à l'Aide de votre imagination, et de la réponse suivante, vous allez atteindre votre but;)

Android comment créer le triangle et le rectangle de forme programmatique?

0
répondu axl coder 2017-05-23 10:31:12