Делать треугольную форму, используя определения XML?

133

Есть ли способ, которым я могу указать форму треугольника в файле 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>

мы можем сделать это с помощью формы пути или что-то? Мне просто нужен равносторонний треугольник.

Спасибо

user291701
источник
Вы нашли решение? У меня та же проблема.
Майк Бевз
Похоже, это сработало для парня, который написал руководство (и несколько комментаторов): Android: рисовать фигуры равносторонних треугольников на холсте
Diegum

Ответы:

166

В этом посте я опишу, как это сделать. А вот 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>

Обратитесь к моему посту, если что-то неясно или вам нужно объяснение, как оно построено. Вращается прямоугольник выреза :) Это очень умное и хорошо работающее решение.

РЕДАКТИРОВАТЬ: чтобы создать стрелку, указывающую как -> использовать:

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

И чтобы создать стрелку, указывающую как <- используйте:

android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="87%"
android:pivotY="140%" >
Яцек Милевски
источник
3
Извините ... но равносторонний треугольник никогда не может быть прямоугольным треугольником.
Lilbyrdie
3
@JacekMilewski - спасибо большое! Хотите поделиться своими параметрами pivotX / pivotY для стрелки вниз? Осталось? Правильно?
JohnnyLambada
2
Чтобы повернуть его, я изменяю поворот в файле макета XML, а не в самом определении треугольника.
Яцек Милевски
1
-1 Это не хорошо Фактические размеры представления больше, чем на экране. Это должно было обернуть границы.
Javanator
1
Не могли бы вы поделиться, как вы получили свои значения для fromDegrees, toDegrees, pivotX и pivotY? У меня есть случай, когда невозможно изменить поворот в файле макета.
Патрик Бреннан
82
<TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="▼"/>

Вы можете получить здесь больше вариантов.

Эльханан Мишраки
источник
3
Как вы положили это значение в XML?
user531069
2
Скопируйте этот TextView и вставьте его в свой xml
Эльханан Мишраки
6
@ user531069: поместите это в свой strings.xml:<string name="bottom_arrow">&#9660;</string>
1
Я хочу отличную стрелку от ссылки, я копирую и вставляю & # 129032; как текст, он показывает какой-то неизвестный символ. ?
М. Усман Хан
2
Это решение создает новую проблему обработки Font Padding в Text View.
Салман Хаквани
59

Вы можете использовать, vectorчтобы сделать треугольник, как это

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>

Тогда используйте это как

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

Для изменения цвета и направления используйте android:tintиandroid: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
    />

результат

введите описание изображения здесь

Для изменения формы вектора вы можете изменить ширину / высоту вектора. Пример изменения ширины до 10dp

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

введите описание изображения здесь

Фан Ван Линь
источник
спасибо, я действительно не знаю, как работают эти векторы. Мне нужен был результат
Хоссейн Шахдуст
как я могу увеличить и уменьшить размер этих треугольников?
Определяя
46

Вы можете использовать векторные рисунки .

Если ваш минимальный API меньше 21, Android Studio автоматически создает растровые изображения PNG для этих более низких версий во время сборки (см. Vector Asset Studio ). Если вы используете библиотеку поддержки, Android даже управляет «реальными векторами» вплоть до API 7 (подробнее об этом в обновлении этого поста внизу).

Красный треугольник, направленный вверх:

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

Добавьте его в свой макет и не забудьте установить clipChildren = "false", если вы поворачиваете треугольник.

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

введите описание изображения здесь

Измените размер (ширину / высоту) треугольника, установив атрибуты Views layout_width / layout_height. Таким образом, вы также можете получить трехсторонний треугольник, если вы все сделаете правильно.

ОБНОВЛЕНИЕ 25.11.2017

Если вы используете библиотеку поддержки, вы можете использовать реальные векторы (вместо создания растрового изображения) еще в API 7 . Просто добавьте:

vectorDrawables.useSupportLibrary = true

делай свое defaultConfig в build.gradle вашего модуля.

Затем установите (векторный xml) объект рисования следующим образом:

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

Все очень хорошо задокументировано на странице Vector Asset Studio .

С тех пор, как эта функция, я работаю совершенно без растровых изображений с точки зрения иконок. Это также немного уменьшает размер APK.

Оливер Мец
источник
1
опубликуйте ссылку, и кто-то загрузит ее для вас :-)
GabrielOshiro
1
+1 vectorDrawables.useSupportLibrary = trueимеет то дополнительное преимущество, что вы можете использовать цвета, определенные в colors.xml, потому что растровые изображения создаются во время сборки (когда определенные цвета недоступны).
Роб
39

Я бы определенно пошел на реализацию View в этом случае:

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);
    }
}

Используйте его в ваших макетах следующим образом:

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

Использование этой реализации даст вам следующий результат:

введите описание изображения здесь

Питер
источник
<com.your.path.to.view.TriangleShapeView ... />
работал
это отлично. Как я могу изменить цвет треугольника. скажем, начальный цвет серый, но меняется на красный при onTouch или onClick?
Фшамри
Это намного лучше, чем взломать в xml
dorsz
@ Питер Привет. Вы можете помочь мне с небольшим улучшением? Мне нужно, чтобы верхний правый угол был закруглен. Как я могу достичь этого?
Бартерио
1
Как бы я добавил текст внутри треугольника?
Сакибой
38

Решение Яцека Milewski работает для меня , и, основываясь на его решении, если вам нужно , и инвертирование треугольника вы можете использовать это:

<?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>
senechaux
источник
-1 Таким образом, вы не можете получить равносторонний треугольник. И в любом случае, у него много потенциальных проблем, т.е. stackoverflow.com/questions/20805826/…
j_kubik
11

Могу ли я помочь вам без использования XML?


Просто,

Пользовательский макет (срез):

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

Ваша деятельность (пример):

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));
    }
}

Рабочий пример:

введите описание изображения здесь


Еще одна абсолютно простая Calculateфункция, которая может вас заинтересовать.

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 Да, вы можете. И благодарю вас. Помимо OP, есть другие люди, которые ищут решение, которые не просят конкретно XML - как я.
johndodo
1
onDraw не будет вызываться для классов, производных от ViewGroup, не по умолчанию. Вы должны либо включить рисование с помощью setWillNotDraw (false), либо вместо этого наследовать от View.
Благо
11

Использование векторного рисования:

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

введите описание изображения здесь

Зиги
источник
Использование Lи zв конце концов исправили мою проблему, спасибо!
окисляется
6

Для тех, кто хочет стрелку прямоугольного треугольника, вот вам:

ШАГ 1. Создайте XML-файл для рисования, скопируйте и вставьте следующий XML-контент в свой XML-документ. (Обратите внимание, что вы можете использовать любое имя для вашего нарисованного XML-файла. В моем случае я называю его "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>

ШАГ 2. В XML вашего макета создайте View и привяжите его фон к рисуемому XML, который вы только что создали в STEP 1 . Для моего случая я связываю v_right_arrow со свойством background моего вида.

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

Пример вывода:

введите описание изображения здесь

Надеюсь это поможет. Удачи!

Чонг Черн Донг
источник
6

Вы можете добавить следующий треугольник в фоновом режиме, используя следующий 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>

Вся логика для настройки дизайна XML в pathData. Рассмотрим верхний левый угол (0,0) и спроектируем макет в соответствии с вашими требованиями. Проверьте этот ответ.

Санджай Шарма
источник
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>
Arunkumar
источник
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

Я никогда не делал этого, но насколько я понимаю, вы можете использовать класс PathShape: http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html

Джастин
источник
2
Как использовать форму пути в XML?
Себастьян Рот
Это было полезно для нахождения нужной части для использования, но не дает достаточно объяснений о том, как ее использовать. В любом случае, спасибо.
Наварр
Извините, Себастьян и Наварр ... Я указал в своем ответе, что никогда не использовал его, поэтому я не уверен, как его использовать. Это просто похоже на класс, который сделал бы работу. Я согласен, хотя, что не достаточно документации для этого.
Джастин
3
PathShape, похоже, не имеет ассоциированного синтаксиса XML. Тег XML Shape поддерживает только прямоугольник, овал, линию и кольцо. developer.android.com/guide/topics/resources/…
Нильзор
3

Я опоздал на вечеринку и столкнулся с той же проблемой, и Google указал мне на этот поток StackOverflow в качестве первого результата.

Я попытался использовать способ XML для добавления треугольника и обнаружил проблему, заключающуюся в том, что форма треугольника с помощью подхода XML занимает больше места, чем кажется.

Смотрите снимок экрана с макетом на

введите описание изображения здесь

Так что в итоге мы создали этот пользовательский класс представления, который может рисовать треугольник любого из следующих типов:

  1. вверх указывая
  2. вниз, указывая
  3. налево указывая
  4. правильное наведение

АСАС

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

Вы можете просто использовать его в XML-макете, как это

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

Я знаю, что OP хотят решения в xml-решении, но, как я уже говорил, проблема с xml-подходом. Надеюсь, это кому-нибудь поможет.

Хите саху
источник
2

Используя решение Яцека Милевского, я сделал ориентированный угол вниз с прозрачным фоном.

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

Вы можете изменить android:pivotXи android:pivotYсместить угол.

Использование:

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

введите описание изображения здесь

Параметры зависят от размера изображения. Например, если ImageViewимеет размер 100dp * 80dp, вы должны использовать эти константы:

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

введите описание изображения здесь

CoolMind
источник
2

Я пытаюсь создать треугольное изображение, как кнопка возврата на панели навигации Android, но я не нашел никакого решения.

Теперь я нашел решение для себя и хотел бы поделиться им.

треугольник навигационная панель андроид

используйте xml ниже

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

rattisuk
источник
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 Таким образом, вы не можете получить равносторонний треугольник. И в любом случае, у него много потенциальных проблем, т.е. stackoverflow.com/questions/20805826/…
j_kubik
0

Google предоставляет треугольник равносторонний здесь .
Выберите VectorDrawable, чтобы размер был гибким.
Он интегрирован в Android Studio как плагин.

Если у вас есть изображение SVG, вы можете использовать его для преобразования в VectorDrawable.

Если у вас есть VectorDrawable, изменить его цвет и вращение легко, как уже упоминали другие.

ericn
источник