Membuat bentuk segitiga menggunakan definisi xml?

133

Apakah ada cara saya bisa menentukan bentuk segitiga dalam 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>

dapatkah kita melakukan ini dengan bentuk jalur atau sesuatu? Saya hanya perlu segitiga sama sisi.

Terima kasih

pengguna291701
sumber
Apakah Anda menemukan solusinya? Saya mempunyai masalah yang sama.
Mike Bevz
Hal ini tampaknya berhasil bagi orang yang menulis panduan (dan beberapa komentator): Android: Menggambar Bentuk Segitiga Sama Sisi Di Kanvas
Diegum

Jawaban:

166

Dalam posting ini saya jelaskan bagaimana melakukannya. Dan di sini adalah segitiga penentu 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>

Lihat posting saya jika ada sesuatu yang tidak jelas atau Anda perlu penjelasan bagaimana itu dibangun. Ini diputar potongan persegi :) itu adalah solusi yang sangat cerdas dan bekerja dengan baik.

EDIT: untuk membuat panah yang menunjuk seperti -> gunakan:

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

Dan untuk membuat panah yang menunjuk seperti <- use:

android:fromDegrees="45"
android:toDegrees="45"
android:pivotX="87%"
android:pivotY="140%" >
Jacek Milewski
sumber
3
Maaf .. tapi segitiga sama sisi tidak pernah bisa menjadi sudut siku-siku.
lilbyrdie
3
@ JacekMilewski - terima kasih banyak! Ingin membagikan parameter pivotX / pivotY Anda untuk panah bawah? Kiri? Baik?
JohnnyLambada
2
Untuk memutarnya saya mengubah rotasi dalam tata letak file xml, bukan dalam definisi segitiga itu sendiri.
Jacek Milewski
1
-1. Ini tidak baik. Dimensi sebenarnya dari tampilan lebih besar daripada yang muncul di layar. Seharusnya membungkus batas.
Javanator
1
Bisakah Anda membagikan bagaimana Anda mendapatkan nilai-nilai Anda dari fromDegrees, toDegrees, pivotX, dan pivotY? Saya memiliki use case di mana tidak mungkin untuk mengubah rotasi pada file layout.
Patrick Brennan
82
<TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="▼"/>

Anda dapat memperoleh lebih banyak opsi di sini .

Elhanan Mishraky
sumber
3
Bagaimana Anda memasukkan nilai itu dalam xml?
user531069
2
Salin TextView ini dan rekatkan ke xml Anda
Elhanan Mishraky
6
@ user531069: letakkan ini di strings.xml Anda:<string name="bottom_arrow">&#9660;</string>
1
Saya ingin panah berbeda dari tautan, saya salin dan tempel & # 129032; sebagai teks, ini menunjukkan beberapa karakter yang tidak dikenal. ?
M. Usman Khan
2
Solusi ini menciptakan masalah baru dalam penanganan Font Padding di dalam Text View.
Salman Khakwani
59

Kamu bisa memakai vector untuk membuat segitiga seperti ini

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>

Kemudian gunakan seperti

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

Untuk mengubah warna dan arah, gunakan android:tintdanandroid: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
    />

Hasil

masukkan deskripsi gambar di sini

Untuk mengubah bentuk vektor, Anda dapat mengubah lebar / tinggi vektor. Contoh ubah lebar menjadi 10dp

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

masukkan deskripsi gambar di sini

Phan Van Linh
sumber
terima kasih, saya tidak benar-benar tahu cara kerja vektor ini. Saya membutuhkan hasilnya
Hossein Shahdoost
bagaimana saya bisa menambah dan mengurangi ukuran segitiga ini? Dengan menentukan tinggi dan lebar, itu tidak berfungsi
Aayushi
46

Anda dapat menggunakan gambar vektor .

Jika API minimum Anda lebih rendah dari 21, Android Studio secara otomatis membuat bitmap PNG untuk versi yang lebih rendah itu pada waktu pembuatan (lihat Vector Asset Studio ). Jika Anda menggunakan pustaka dukungan, Android bahkan mengelola "vektor nyata" hingga API 7 (lebih lanjut tentang itu dalam pembaruan posting ini di bagian bawah).

Segitiga menunjuk ke atas merah adalah:

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

Tambahkan ke tata letak Anda dan ingat untuk mengatur clipChildren = "false" jika Anda memutar segitiga.

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

masukkan deskripsi gambar di sini

Ubah ukuran (lebar / tinggi) segitiga dengan mengatur atribut Views layout_width / layout_height. Dengan cara ini Anda juga bisa mendapatkan segitiga eqilateral jika Anda melakukan perhitungan matematika dengan benar.

PEMBARUAN 25.11.2017

Jika Anda menggunakan perpustakaan dukungan, Anda dapat menggunakan vektor nyata (alih-alih jika pembuatan bitmap) sejauh API 7 . Cukup tambahkan:

vectorDrawables.useSupportLibrary = true

lakukan tugasmu defaultConfig di build.gradle modul Anda.

Kemudian atur (vektor xml) gambar seperti ini:

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

Semuanya didokumentasikan dengan sangat baik di halaman Vector Asset Studio .

Sejak fitur ini saya telah bekerja sepenuhnya tanpa bitmap dalam hal ikon. Ini juga mengurangi ukuran APK sedikit.

Oliver Metz
sumber
1
memposting tautan dan seseorang akan mengunggahnya untuk Anda :-)
GabrielOshiro
1
+1 vectorDrawables.useSupportLibrary = truememiliki manfaat tambahan yang dapat Anda gunakan dengan warna yang ditentukan colors.xml, karena bitmap dibuat selama pembuatan (ketika warna yang ditentukan tidak tersedia).
Rob
39

Saya pasti akan pergi untuk menerapkan Tampilan dalam kasus ini:

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

Manfaatkan itu di tata letak Anda sebagai berikut:

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

Menggunakan implementasi ini akan memberi Anda hasil berikut:

masukkan deskripsi gambar di sini

Peter
sumber
<com.your.path.to.view.TriangleShapeView ... />
bekerja
Itu hebat. bagaimana saya bisa mengubah warna segitiga. mengatakan warna awal berwarna abu-abu tetapi berubah menjadi merah pada onTouch atau onClick?
Fshamri
Ini jauh lebih baik daripada retas di xml
dorsz
@Peter Hai. dapatkah Anda membantu saya dengan perbaikan kecil? Saya perlu sudut kanan atas untuk dibulatkan. bagaimana saya bisa mencapai ini?
Barterio
1
Bagaimana saya menambahkan teks di dalam segitiga?
Sakiboy
38

The larutan Jacek Milewski bekerja untuk saya dan, berdasarkan solusinya, jika Anda butuhkan dan segitiga yang terbalik Anda dapat menggunakan ini:

<?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
sumber
-1 Dengan cara ini Anda tidak bisa mendapatkan segitiga eqilateral. Lagi pula, itu memiliki banyak masalah potensial yaitu. stackoverflow.com/questions/20805826/…
j_kubik
21

Lihat jawaban di sini: Panah khusus tanpa gambar: 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>

panah

zed
sumber
11

Saya bisa membantu Anda tanpa menggunakan XML?


Secara sederhana,

Tata Letak Kustom (Iris):

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

Aktivitas Anda (Contoh):

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

Contoh kerja:

masukkan deskripsi gambar di sini


CalculateFungsi lain yang sangat sederhana Anda mungkin tertarik ..

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;
}
Ahmed Ghoneim
sumber
11
+1 Ya, Anda mungkin. Dan terima kasih. Ada orang lain selain OP yang mencari solusi yang tidak meminta XML secara spesifik - seperti saya
Johndodo
1
onDraw tidak akan dipanggil pada kelas yang berasal dari ViewGroup, bukan default. Anda harus mengaktifkan gambar dengan setWillNotDraw (false) atau mewarisi dari View sebagai gantinya.
Blago
11

Menggunakan gambar vektor:

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

masukkan deskripsi gambar di sini

Zygi
sumber
Menggunakan Ldan zpada akhirnya memperbaiki masalah saya, terima kasih!
dioksidasi
6

Bagi mereka yang menginginkan panah segitiga kanan, ini dia:

LANGKAH 1: Buat file XML yang dapat digambar, salin dan tempel konten XML berikut ke dalam XML yang dapat Anda gambar. (Perlu diketahui bahwa Anda dapat menggunakan nama apa pun untuk file XML yang dapat ditarik. Untuk kasus saya, saya beri nama "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>

LANGKAH 2: Dalam tata letak XML Anda, buat Tampilan dan ikat latar belakangnya dengan XML yang dapat ditarik yang baru saja Anda buat di LANGKAH 1 . Untuk kasus saya, saya mengikat v_right_arrow ke properti latar belakang tampilan saya.

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

Output sampel:

masukkan deskripsi gambar di sini

Semoga ini bisa membantu, semoga berhasil!

Chong Chern Dong
sumber
6

Anda dapat menambahkan segitiga berikut di latar belakang menggunakan xml berikut

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

Seluruh logika untuk menyesuaikan desain xml ada di pathData. Pertimbangkan kiri atas sebagai (0,0) dan desain tata letak sesuai kebutuhan Anda. Periksa jawaban ini .

Sanjay Sharma
sumber
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
sumber
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>
Shivam Kumar
sumber
3

Saya belum pernah melakukan ini, tetapi dari apa yang saya mengerti Anda dapat menggunakan kelas PathShape: http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html

Justin
sumber
2
Bagaimana cara menggunakan bentuk jalur dalam XML?
Sebastian Roth
Ini membantu untuk menemukan bagian yang tepat untuk digunakan, tetapi tidak menawarkan penjelasan yang cukup tentang cara menggunakannya. Bagaimanapun, terima kasih.
Navarr
Maaf Sebastian dan Navarr ... Saya menunjukkan dalam jawaban saya bahwa saya belum pernah menggunakannya, jadi saya tidak yakin bagaimana cara menggunakannya. Ini sepertinya kelas yang akan menyelesaikan pekerjaan. Saya setuju bahwa tidak ada cukup dokumentasi untuk itu.
Justin
3
PathShape tampaknya tidak memiliki sintaks XML terkait. Tag Bentuk XML hanya mendukung kotak, oval, garis, dan dering. developer.android.com/guide/topics/resources/…
Nilzor
3

Saya terlambat datang ke pesta dan menemukan masalah yang sama dan Google mengarahkan saya ke utas StackOverflow ini sebagai hasil pertama.

Saya mencoba menggunakan cara xml untuk menambahkan segitiga dan menemukan masalah bahwa bentuk segitiga melalui pendekatan xml mengambil lebih banyak ruang daripada yang terlihat.

Lihat tangkapan layar dengan batas tata letak aktif

masukkan deskripsi gambar di sini

Jadi akhirnya membuat kelas tampilan kustom ini yang dapat menggambar Segitiga dari jenis berikut: -

  1. menunjuk
  2. menunjuk ke bawah
  3. menunjuk ke kiri &
  4. menunjuk tepat

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

Anda bisa Cukup menggunakannya dalam tata letak xml seperti ini

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

Saya tahu OP ingin solusi dalam solusi xml tetapi seperti yang saya tunjukkan masalah dengan pendekatan xml. Saya harap ini bisa membantu seseorang.

Hitesh Sahu
sumber
2

Menggunakan solusi Jacek Milewski saya membuat sudut bawah yang berorientasi dengan latar belakang transparan.

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

Anda dapat mengubah android:pivotXdan android:pivotYmenggeser sudut.

Pemakaian:

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

masukkan deskripsi gambar di sini

Parameter tergantung pada ukuran gambar. Misalnya, jika ImageViewmemiliki ukuran 100dp * 80dp, Anda harus menggunakan konstanta ini:

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

masukkan deskripsi gambar di sini

CoolMind
sumber
2

Saya mencoba membuat gambar segitiga seperti tombol kembali bilah navigasi Android tapi saya belum menemukan solusi.

Sekarang, saya menemukan solusinya dengan diri saya sendiri dan ingin membagikannya.

panel navigasi segitiga android

gunakan xml di bawah ini

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

Kena Patel
sumber
-1 Dengan cara ini Anda tidak bisa mendapatkan segitiga eqilateral. Lagi pula, itu memiliki banyak masalah potensial yaitu. stackoverflow.com/questions/20805826/…
j_kubik
0

Google menyediakan segitiga sama sisi di sini .
Pilih VectorDrawable sehingga ukurannya fleksibel.
Ini terintegrasi ke dalam Android Studio sebagai plugin.

Jika Anda memiliki gambar SVG, Anda dapat menggunakan ini untuk mengubahnya menjadi VectorDrawable juga.

Setelah Anda memiliki VectorDrawable, mengubah warna dan putarannya mudah seperti yang telah disebutkan orang lain.

ericn
sumber