Fare una forma triangolare usando le definizioni xml?


133

C'è un modo in cui posso specificare una forma triangolare in un file XML?

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="triangle">
  <stroke android:width="1dip" android:color="#FFF" />
  <solid android:color="#FFF" />
</shape>

possiamo farlo con una forma del percorso o qualcosa del genere? Ho solo bisogno di un triangolo equilatero.

Grazie


Hai trovato una soluzione? Sto avendo lo stesso problema.
Mike Bevz,

Questo sembra aver funzionato per il ragazzo che ha scritto la guida (e alcuni commentatori): Android: Disegna forme triangolari equilateri su tela
Diegum

Risposte:


166

In questo post descrivo come farlo. Ed ecco il triangolo che definisce XML:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@color/transparent" android:width="10dp"/>
                <solid
                    android:color="@color/your_color_here" />
            </shape>
        </rotate>
    </item>
</layer-list>

Fai riferimento al mio post se qualcosa non è chiaro o hai bisogno di spiegazioni su come è costruito. Viene ruotato di un rettangolo di ritaglio :) è una soluzione molto intelligente e ben funzionante.

EDIT: per creare una freccia che punta come -> usa:

...
android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="13%"
android:pivotY="-40%" >
...

E per creare una freccia che punta come <- usa:

android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="87%"
android:pivotY="140%" >

3
Mi dispiace .. ma un triangolo equilatero non può mai essere un triangolo ad angolo retto.
lilbyrdie,

3
@JacekMilewski - grazie mille! Vuoi condividere quali sono i tuoi parametri pivotX / pivotY per una freccia giù? Sinistra? Destra?
JohnnyLambada,

2
Per ruotarlo cambio la rotazione nel file xml del layout, non nella definizione del triangolo stesso.
Jacek Milewski,

1
-1. Questo non va bene. Le dimensioni effettive della vista sono maggiori di quelle visualizzate sullo schermo. Avrebbe dovuto superare i limiti.
Javanator,

1
Puoi per favore condividere come hai derivato i tuoi valori da da Degree, a Degeg, pivotX e pivotY? Ho un caso d'uso in cui non è possibile modificare la rotazione nel file di layout.
Patrick Brennan,

82
<TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="▼"/>

Puoi ottenere qui più opzioni.


3
Come si inserisce quel valore in XML?
user531069

2
Copia questo TextView e incollalo sul tuo xml
Elhanan Mishraky il

6
@ user531069: inseriscilo su strings.xml:<string name="bottom_arrow">&#9660;</string>

1
Voglio una freccia diversa dal link, copio e incollo & # 129032; come testo, mostra alcuni caratteri sconosciuti. ?
M. Usman Khan,

2
Questa soluzione crea un nuovo problema nella gestione dell'imbottitura dei caratteri all'interno della vista testo.
Salman Khakwani,

59

Puoi usare vectorper creare un triangolo come questo

ic_triangle_right.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:pathData="M0,12l0,12 11.5,-5.7c6.3,-3.2 11.5,-6 11.5,-6.3 0,-0.3 -5.2,-3.1 -11.5,-6.3l-11.5,-5.7 0,12z"
        android:strokeColor="#00000000"
        android:fillColor="#000000"/>
</vector>

Quindi usalo come

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    />

Per cambiare il colore e la direzione, utilizzare android:tinteandroid:rotation

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_triangle_right"
    android:rotation="180" // change direction
    android:tint="#00f" // change color
    />

Risultato

inserisci qui la descrizione dell'immagine

Per modificare la forma del vettore, è possibile modificare la larghezza / altezza del vettore. Esempio: modifica la larghezza in 10 dpi

<vector 
        android:width="10dp"
        android:height="24dp"
        >
       ...
</vector>

inserisci qui la descrizione dell'immagine


grazie, non so davvero come funzionano questi vettori. Avevo bisogno del risultato
Hossein Shahdoost,

come posso aumentare e diminuire la dimensione di questi triangoli? Specificando altezza e larghezza, non funziona
Aayushi,

46

È possibile utilizzare disegnabili vettoriali .

Se l'API minima è inferiore a 21, Android Studio crea automaticamente bitmap PNG per quelle versioni inferiori al momento della compilazione (vedi Vector Asset Studio ). Se usi la libreria di supporto, Android gestisce persino i "vettori reali" fino all'API 7 (ne parleremo più avanti nell'aggiornamento di questo post in fondo).

Un triangolo rosso rivolto verso l'alto sarebbe:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#FF0000"
            android:pathData="m 50,0 l 50,100 -100,0 z" />
    </group>
</vector>

Aggiungilo al tuo layout e ricorda di impostare clipChildren = "false" se ruoti il ​​triangolo.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false">

    <ImageView
        android:layout_width="130dp"
        android:layout_height="100dp"
        android:rotation="0"
        android:layout_centerInParent="true"
        android:background="@drawable/triangle"/>

</RelativeLayout>

inserisci qui la descrizione dell'immagine

Modifica le dimensioni (larghezza / altezza) del triangolo impostando gli attributi Layout_width / layout_height di Views. In questo modo puoi anche ottenere una triagle eqilaterale se esegui la matematica corretta.

AGGIORNAMENTO 25.11.2017

Se si utilizza la libreria di supporto è possibile utilizzare vettori reali (invece se la creazione di bitmap) fin dall'API 7 . Aggiungi semplicemente:

vectorDrawables.useSupportLibrary = true

fai il tuo defaultConfignel build.gradle del tuo modulo.

Quindi impostare il disegno (vector xml) in questo modo:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    app:srcCompat="@drawable/triangle" />

Tutto è documentato molto bene sulla pagina di Vector Asset Studio .

Da allora questa funzione ho lavorato completamente senza bitmap in termini di icone. Ciò riduce anche un po 'le dimensioni dell'APK.


1
pubblica un link e qualcuno lo caricherà per te :-)
GabrielOshiro

1
+1 vectorDrawables.useSupportLibrary = trueha il vantaggio extra di poter usare i colori definiti colors.xml, poiché le bitmap vengono create durante la compilazione (quando i colori definiti non sono disponibili).
Rob,

39

Sicuramente sceglierei l'implementazione di una vista in questo caso:

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

public class TriangleShapeView extends View {

    public TriangleShapeView(Context context) {
        super(context);
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int w = getWidth() / 2;

        Path path = new Path();
        path.moveTo( w, 0);
        path.lineTo( 2 * w , 0);
        path.lineTo( 2 * w , w);
        path.lineTo( w , 0);
        path.close();

        Paint p = new Paint();
        p.setColor( Color.RED );

        canvas.drawPath(path, p);
    }
}

Usalo nei tuoi layout come segue:

<TriangleShapeView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff487fff">
</TriangleShapeView>

L'uso di questa implementazione ti darà il seguente risultato:

inserisci qui la descrizione dell'immagine


<com.your.path.to.view.TriangleShapeView ... />
funzionato il

è grandioso. come posso cambiare il colore del triangolo. dire che il colore iniziale è grigio ma diventa rosso su onTouch o onClick?
Fshamri,

Questo è molto meglio dell'hacking in xml
dorsz,

@Peter Ciao. mi potete aiutare con un piccolo miglioramento? Ho bisogno di arrotondare l'angolo in alto a destra. come posso ottenerlo?
Barterio,

1
Come aggiungerei del testo all'interno del triangolo?
Sakiboy,

38

La soluzione di Jacek Milewski funziona per me e, in base alla sua soluzione, se hai bisogno di un triangolo inverso puoi usare questo:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="135%" 
            android:pivotY="15%">
            <shape android:shape="rectangle">    
                <solid android:color="@color/aquamarine" />
            </shape>
        </rotate>
    </item>
</layer-list>

-1 In questo modo non è possibile ottenere un triangolo eqilaterale. E comunque, sta avendo molti potenziali problemi, ad es. stackoverflow.com/questions/20805826/...
j_kubik

21

Vedi la risposta qui: Frecce personalizzate senza immagine: Android

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="32dp"
        android:height="24dp"
        android:viewportWidth="32.0"
        android:viewportHeight="24.0">
    <path android:fillColor="#e4e4e8"
          android:pathData="M0 0 h32 l-16 24 Z"/>
</vector>

freccia


11

Posso aiutarti senza usare XML?


Semplicemente,

Layout personalizzato (Slice):

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.View;

public class Slice extends View {

    Paint mPaint;

    Path mPath;

    public enum Direction {
        NORTH, SOUTH, EAST, WEST
    }

    public Slice(Context context) {
        super(context);
        create();
    }

    public Slice(Context context, AttributeSet attrs) {
        super(context, attrs);
        create();
    }

    public void setColor(int color) {
        mPaint.setColor(color);
        invalidate();
    }

    private void create() {
        mPaint = new Paint();
        mPaint.setStyle(Style.FILL);
        mPaint.setColor(Color.RED);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        mPath = calculate(Direction.SOUTH);
        canvas.drawPath(mPath, mPaint);
    }

    private Path calculate(Direction direction) {
        Point p1 = new Point();
        p1.x = 0;
        p1.y = 0;

        Point p2 = null, p3 = null;

        int width = getWidth();

        if (direction == Direction.NORTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y - width);
        } else if (direction == Direction.SOUTH) {
            p2 = new Point(p1.x + width, p1.y);
            p3 = new Point(p1.x + (width / 2), p1.y + width);
        } else if (direction == Direction.EAST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x - width, p1.y + (width / 2));
        } else if (direction == Direction.WEST) {
            p2 = new Point(p1.x, p1.y + width);
            p3 = new Point(p1.x + width, p1.y + (width / 2));
        }

        Path path = new Path();
        path.moveTo(p1.x, p1.y);
        path.lineTo(p2.x, p2.y);
        path.lineTo(p3.x, p3.y);

        return path;
    }
}

La tua attività (esempio):

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class Layout extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Slice mySlice = new Slice(getApplicationContext());
        mySlice.setBackgroundColor(Color.WHITE);
        setContentView(mySlice, new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    }
}

Esempio di lavoro:

inserisci qui la descrizione dell'immagine


Un'altra Calculatefunzione assolutamente semplice che potrebbe interessarti ..

private Path Calculate(Point A, Point B, Point C) {
    Path Pencil = new Path();
    Pencil.moveTo(A.x, A.y);
    Pencil.lineTo(B.x, B.y);
    Pencil.lineTo(C.x, C.y);
    return Pencil;
}

11
+1 Sì, puoi. E grazie. Ci sono altre persone oltre a OP che cercano una soluzione che non chiedono specificamente XML - come lo sono io
johndodo,

1
onDraw non verrà chiamato per le classi che derivano da ViewGroup, non per impostazione predefinita. Devi invece abilitare il disegno con setWillNotDraw (false) o ereditare da una vista.
Blago,

11

Utilizzando il disegno vettoriale:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
   android:width="24dp"
   android:height="24dp"
   android:viewportWidth="24.0"
   android:viewportHeight="24.0">
   <path
        android:pathData="M0,0 L24,0 L0,24 z"
        android:strokeColor="@color/color"
        android:fillColor="@color/color"/>
</vector>

inserisci qui la descrizione dell'immagine


Utilizzando Le zalla fine risolto il mio problema, grazie!
ossessionato il

6

Per chi desidera una freccia a triangolo destro, ecco qui:

PASSAGGIO 1: crea un file XML di disegno, copia e incolla il seguente contenuto XML nel tuo XML di disegno. (Si informa che è possibile utilizzare qualsiasi nome per il file XML disegnabile. Nel mio caso, lo chiamo "v_right_arrow")

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <rotate
            android:fromDegrees="45"
            android:toDegrees="-45"
            android:pivotX="15%"
            android:pivotY="-36%" >
            <shape
                android:shape="rectangle"  >
                <stroke android:color="@android:color/transparent" android:width="1dp"/>
                <solid
                    android:color="#000000"  />
            </shape>
        </rotate>
    </item>
</layer-list>

PASSAGGIO 2: nell'XML del layout, creare una vista e associare il suo sfondo all'XML disegnabile appena creato nel PASSAGGIO 1 . Nel mio caso, associo v_right_arrow alla proprietà in background della mia vista.

<View
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="@drawable/v_right_arrow">
</View>

Uscita campione:

inserisci qui la descrizione dell'immagine

Spero che questo ti aiuti, buona fortuna!


6

Puoi aggiungere il seguente triangolo in background usando il seguente xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:height="100dp"
    android:width="100dp"
    android:viewportHeight="100"
    android:viewportWidth="100" >
    <group
        android:name="triableGroup">
        <path
            android:name="triangle"
            android:fillColor="#848af8"
            android:pathData="M 0,20 L 0,0 L 100,0 L 100,20 L 54,55  l -1,0.6  l -1,0.4  l -1,0.2  l -1,0   l -1,-0  l -1,-0.2  l -1,-0.4  l -1,-0.6    L 46,55   L 0,20 -100,-100 Z" />
    </group>
</vector>

L'intera logica per personalizzare il design XML è dentro pathData. Considerare in alto a sinistra come (0,0) e progettare il layout secondo le proprie esigenze. Controlla questa risposta.


4
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <rotate
            android:fromDegrees="45"
            android:toDegrees="45"
            android:pivotX="-40%"
            android:pivotY="87%" >
            <shape
                android:shape="rectangle" >
                <stroke android:color="@android:color/transparent" android:width="0dp"/>
                <solid
                    android:color="#fff" />
            </shape>
        </rotate>
    </item>
</layer-list>

4
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <rotate
                android:fromDegrees="45"
                android:pivotX="135%"
                android:pivotY="1%"
                android:toDegrees="45">
                <shape android:shape="rectangle">
                    <stroke
                        android:width="-60dp"
                        android:color="@android:color/transparent" />
                    <solid android:color="@color/orange" />
                </shape>
            </rotate>
        </item>
    </layer-list>

3

Non l'ho mai fatto, ma da quello che ho capito puoi usare la classe PathShape: http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html


2
Come utilizzare la forma del percorso in XML?
Sebastian Roth,

Questo è stato utile per trovare la parte giusta da usare, ma non offre spiegazioni quasi sufficienti su come usarlo. Grazie comunque, comunque.
Navarr,

Mi dispiace Sebastian e Navarr ... Nella mia risposta ho indicato che non l'ho mai usato, quindi non sono sicuro di come usarlo. Sembra proprio la classe che avrebbe svolto il lavoro. Sono d'accordo però che non c'è abbastanza documentazione per questo.
Justin

3
PathShape non sembra avere una sintassi XML associata. Il tag forma XML supporta solo rettangolo, ovale, linea e anello. developer.android.com/guide/topics/resources/…
Nilzor,

3

Sono in ritardo per festeggiare e ho riscontrato lo stesso problema e Google mi ha indicato questo thread StackOverflow come primo risultato.

Ho provato a usare il modo xml per aggiungere un triangolo e scoprire un problema che la forma del triangolo tramite l'approccio xml occupa più spazio di quanto sembri.

Guarda la schermata con i limiti del layout attivi

inserisci qui la descrizione dell'immagine

Quindi ho finito per creare questa classe di visualizzazione personalizzata che può disegnare Triangoli di uno dei seguenti tipi: -

  1. indicando
  2. verso il basso
  3. puntamento sinistro e
  4. puntamento giusto

ASAS

package com.hiteshsahu.materialupvotewidget;    
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.NonNull;
import android.util.AttributeSet;
import android.view.View;

public class TriangleShapeView extends View {

    private int colorCode = Color.DKGRAY;

    public int getColorCode() {
        return colorCode;
    }

    public void setColorCode(int colorCode) {
        this.colorCode = colorCode;
    }

    public TriangleShapeView(Context context) {
        super(context);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (isInEditMode())
            return;
    }

    public TriangleShapeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        if (isInEditMode())
            return;
    }


    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        int w = getWidth() / 2;
        int h = getHeight() / 2;

        //Choose what type of triangle you want here
        Path path = getLeftTriangle(w, h);

        path.close();
        Paint p = new Paint();
        p.setColor(colorCode);
        p.setAntiAlias(true);

        canvas.drawPath(path, p);
    }

    @NonNull
    /**
     * Return Path for down facing triangle
     */
    private Path getInvertedTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(w, 2 * h);
        path.lineTo(2 * w, 0);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Up facing triangle
     */
    private Path getUpTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 2 * h);
        path.lineTo(w, 0);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(0, 2 * h);
        return path;
    }

    @NonNull
    /**
     * Return Path for Right pointing triangle
     */
    private Path getRightTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(2 * w, h);
        path.lineTo(0, 2 * h);
        path.lineTo(0, 0);
        return path;
    }

    @NonNull
    /**
     * Return Path for Left pointing triangle
     */
    private Path getLeftTriangle(int w, int h) {
        Path path = new Path();
        path.moveTo(2 * w, 0);
        path.lineTo(0, h);
        path.lineTo(2 * w, 2 * h);
        path.lineTo(2 * w, 0);
        return path;
    }
}

Puoi semplicemente usarlo nel layout xml in questo modo

 <com.hiteshsahu.materialupvote.TriangleShapeView
            android:layout_width="50dp"
            android:layout_height="50dp"></com.hiteshsahu.materialupvote.TriangleShapeView>

So che OP vuole soluzioni nella soluzione xml ma come ho sottolineato il problema con l'approccio xml. Spero che possa aiutare qualcuno.


2

Usando la soluzione di Jacek Milewski ho realizzato un angolo orientato verso il basso con uno sfondo trasparente.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="135"
            android:pivotX="65%"
            android:pivotY="20%"
            android:toDegrees="135"
            >
            <shape android:shape="rectangle">
                <stroke
                    android:width="1dp"
                    android:color="@color/blue"
                    />
                <solid android:color="@color/transparent" />
            </shape>
        </rotate>
    </item>
</layer-list>

È possibile modificare android:pivotXe android:pivotYspostare l'angolazione.

Uso:

<ImageView
    android:layout_width="10dp"
    android:layout_height="10dp"
    android:src="@drawable/ic_angle_down"
    />

inserisci qui la descrizione dell'immagine

I parametri dipendono dalla dimensione dell'immagine. Ad esempio, se ImageViewha dimensioni 100dp * 80dp, è necessario utilizzare queste costanti:

<rotate
    android:fromDegrees="135"
    android:pivotX="64.5%"
    android:pivotY="19%"
    android:toDegrees="135"
    >

inserisci qui la descrizione dell'immagine


2

Cerco di creare un'immagine triangolare come il pulsante Indietro della barra di navigazione Android ma non ho trovato alcuna soluzione.

Ora, ho trovato la soluzione con me stesso e vorrei condividerla.

barra di navigazione triangolare android

usa xml qui sotto

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:bottom="20dp"
    android:left="480dp"
    android:right="60dp"
    android:top="20dp">
    <shape>
        <size android:width="60dp" />
        <corners android:radius="80dp"/>
        <solid android:color="#AAA" />
    </shape>
</item>
<item
    android:bottom="480dp"
    android:right="70dp"
    android:top="20dp">
    <rotate
        android:fromDegrees="-28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>

<item
    android:bottom="20dp"
    android:right="70dp"
    android:top="480dp">
    <rotate
        android:fromDegrees="28"
        android:pivotX="96%"
        android:pivotY="50%"
        android:toDegrees="-20">
        <shape>
            <corners android:radius="80dp"/>
            <size android:height="60dp" />
            <solid android:color="#AAA" />
        </shape>
    </rotate>
</item>


0
  <LinearLayout
        android:id="@+id/ly_fill_color_shape"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center"
        android:background="@drawable/shape_triangle"
        android:gravity="center"
        android:orientation="horizontal" >
    </LinearLayout>

<item>
    <rotate
        android:fromDegrees="45"
        android:pivotX="-15%"
        android:pivotY="77%"
        android:toDegrees="45" >
        <shape android:shape="rectangle" >
            <stroke
                android:width="2dp"
                android:color="@color/black_color" />

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

            <padding android:left="1dp" />
        </shape>
    </rotate>
</item>
<item android:top="200dp">
    <shape android:shape="line" >
        <stroke
            android:width="1dp"
            android:color="@color/black_color" />

        <solid android:color="@color/white" /> 
    </shape>
</item>


-1 In questo modo non è possibile ottenere un triangolo eqilaterale. E comunque, sta avendo molti potenziali problemi, ad es. stackoverflow.com/questions/20805826/...
j_kubik

0

Google fornisce un triangolo equilatero qui .
Scegli VectorDrawable in modo che le dimensioni siano flessibili.
E 'integrato in Android Studio come plugin.

Se si dispone di un'immagine SVG, è possibile utilizzare questo per convertirlo in VectorDrawable troppo.

Una volta che hai un disegno vettoriale, cambiarne il colore e la rotazione è facile come altri hanno già detto.

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.