Bagaimana cara menentukan bentuk lingkaran dalam file yang dapat digambar Android XML?


687

Saya memiliki beberapa masalah dalam menemukan dokumentasi definisi bentuk dalam XML untuk Android. Saya ingin mendefinisikan lingkaran sederhana yang diisi dengan warna solid dalam File XML untuk memasukkannya ke dalam file layout saya.

Sayangnya Dokumentasi di android.com tidak mencakup atribut XML dari kelas Shape. Saya pikir saya harus menggunakan ArcShape untuk menggambar lingkaran tetapi tidak ada penjelasan tentang cara mengatur ukuran, warna, atau sudut yang diperlukan untuk membuat lingkaran keluar dari Arc.


3
Di sini Anda dapat membaca tentang cara membuat shape drawable: developer.android.com/guide/topics/resources/…
Mario Kutlev


Dokumentasi Android Dev telah ditingkatkan sejak saat itu. Sekarang ia mencakup android:shapeelemen - Sumber daya yang dapat digambar .
naXa

Jawaban:


1513

Ini adalah lingkaran sederhana yang dapat digambar di Android.

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

   <solid 
       android:color="#666666"/>

   <size 
       android:width="120dp"
        android:height="120dp"/>
</shape>

51
Dan bagaimana cara mengubah warna secara dinamis?
Ankit Garg

5
@AnkitGarg Anda dapat menerapkan filter warna dari kode Java (lihat kelas
Drawable

7
Saya mencoba dpdan itu terdistorsi menjadi bentuk oval. Bagi saya, menggunakan ptbukan memperbaikinya.
Tyler

13
Tidak perlu sizedi dalam shapejika nanti Anda menentukan ukuran persegi untuk tampilan.
Ferran Maylinch

2
Bentuknya oval dan tidak bulat. Adakah yang bisa mengkonfirmasi ??
Tarun

762

Jadikan ini sebagai latar belakang tampilan Anda

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <stroke
        android:width="1dp"
        android:color="#78d9ff"/>
</shape>

masukkan deskripsi gambar di sini

Untuk penggunaan lingkaran padat:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="#48b3ff"/>
</shape>

masukkan deskripsi gambar di sini

Padat dengan stroke:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#199fff"/>
    <stroke
        android:width="2dp"
        android:color="#444444"/>
</shape>

masukkan deskripsi gambar di sini

Catatan : Untuk membuat ovalbentuk muncul sebagai lingkaran, dalam contoh ini, baik tampilan Anda bahwa Anda menggunakan bentuk ini sebagai latar belakangnya harus persegi atau Anda harus mengatur heightdan widthproperti tag bentuk ke nilai yang sama.


2
Solusi yang bagus. Tentu saja, oval muncul sebagai lingkaran jika lebar dan tinggi tampilan sama. Saya pikir ada cara untuk membuatnya tampak sebagai lingkaran tidak peduli ukuran tampilan.
Ferran Maylinch

2
@FerranMaylinch "Saya pikir ada cara untuk membuatnya tampak sebagai lingkaran tidak peduli ukuran tampilan." Saya memecahkan ini menggunakan RelativeLayout yang membungkus kedua ImageView (dengan lingkaran sebagai "src" drawable) dengan lebar tetap / tinggi dan TextView yang membungkus teks (misalnya).
Michele

Saya melakukan hal yang persis sama tetapi lingkarannya digambarkan sebagai oval
Bugs Happen

Bagaimana jika kita membutuhkannya untuk membuat di sekitar tampilan teks dengan warna perbatasan yang berbeda pada saat run time?
Anshul Tyagi

@AnshulTyagi Saya yakin Anda bisa melakukannya dengan menelepon yourView.getBackground()dan mengatur warna secara manual. Anda perlu melemparkannya ke jenis yang tepat seperti ShapeDrawable. Ada pertanyaan terkait pada SO tentang ini.
M. Reza Nasirloo

93

Kode untuk lingkaran sederhana

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
        <solid android:color="#9F2200"/>
        <stroke android:width="2dp" android:color="#fff" />
        <size android:width="80dp" android:height="80dp"/>
</shape>

46

Lihat di sampel Android SDK. Ada beberapa contoh dalam proyek ApiDemos:

/ ApiDemos / res / drawable /

  • black_box.xml
  • shape_5.xml
  • dll

Ini akan terlihat seperti ini untuk lingkaran dengan isian gradien:

<? xml version = "1.0" encoding = "utf-8"?>
<shape xmlns: android = "http://schemas.android.com/apk/res/android" android: shape = "oval">
    <gradient android: startColor = "# FFFF0000" android: endColor = "# 80FF00FF"
            android: angle = "270" />
</shape>


46

Anda dapat menggunakan VectorDrawable seperti di bawah ini:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="200dp"
    android:viewportHeight="64"
    android:viewportWidth="64">

    <path
        android:fillColor="#ff00ff"
        android:pathData="M22,32
        A10,10 0 1,1 42,32
        A10,10 0 1,1 22,32 Z" />
</vector>

Xml di atas diterjemahkan sebagai:

masukkan deskripsi gambar di sini


Hei, saya memiliki bantalan antara lingkaran dan viewport. Bisakah Anda membantu saya?
Ajeet

1
@Ajeet Anda dapat mengubah ukuran viewport dan Anda dapat meletakkan path Anda di dalam grup dan menentukan terjemahan dan skala<group android:translateX="-10" android:translateY="15"><path ...
Boris Treukhov

2
@Riyas dapatkah Anda menjelaskan bagian pathData? apa yang tersirat dari koordinat tersebut?
Darshan Miskin

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

    <!-- fill color -->
    <solid android:color="@color/white" />

    <!-- radius -->
    <stroke
        android:width="1dp"
        android:color="@color/white" />

    <!-- corners -->
    <corners
        android:radius="2dp"/>
</shape>

1
Apa yang <corners />dilakukan di oval (yang menurut saya tidak memiliki sudut)?
Scott Biggs

17

Berikut adalah circle_background.xml sederhana untuk pra-materi:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="@color/color_accent_dark" />
        </shape>
    </item>
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/color_accent" />
        </shape>
    </item>
</selector>

Anda dapat menggunakan dengan atribut 'android:background="@drawable/circle_background"dalam definisi tata letak tombol Anda


+ tambahkan 'ukuran' ke bentuk (tergantung pada usecase).
TouchBoarder

17

Jika Anda ingin lingkaran seperti ini

masukkan deskripsi gambar di sini

Coba gunakan kode di bawah ini:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="2"
    android:useLevel="false" >
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1dp"
        android:color="@android:color/darker_gray" />
</shape>

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

    <stroke
        android:width="10dp"
        android:color="@color/white"/>

    <gradient
        android:startColor="@color/red"
        android:centerColor="@color/red"
        android:endColor="@color/red"
        android:angle="270"/>

    <size 
        android:width="250dp" 
        android:height="250dp"/>
</shape>

7

res / drawble / circle_shape.xml

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

        <shape android:shape="oval">
            <solid android:color="#e42828"/>
            <stroke android:color="#3b91d7" android:width="5dp"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

masukkan deskripsi gambar di sini


4

Anda dapat mencoba ini -

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="700"
    android:thickness="100dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

Anda juga dapat menyesuaikan jari-jari lingkaran dengan menyesuaikan android:thickness.

masukkan deskripsi gambar di sini


Ini sangat bagus! Tentunya dibutuhkan beberapa permainan karena atributnya tidak intuitif. Saya berhasil mendapatkan ini untuk menampilkan lingkaran kosong yang bagus untuk perbatasan setiap waktu. Dan Anda dapat menggunakan padding untuk memastikan seluruh lingkaran ditampilkan.
Scott Biggs

2

Saya tidak bisa menggambar lingkaran di dalam ConstraintLayout saya karena suatu alasan, saya tidak bisa menggunakan jawaban di atas.

Apa yang berhasil dengan sempurna adalah TextView sederhana dengan teks yang keluar, ketika Anda menekan "Alt + 7":

 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#0075bc"
            android:textSize="40dp"
            android:text="•"></TextView>

Sangat pintar! Saya yakin seseorang akan menemukan ini berguna.
Scott Biggs

sangat berguna, bagus ..
Mahbubur Rahman Khan

1

Anda dapat mencoba menggunakan ini

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

<item>
    <shape
        android:innerRadius="0dp"
        android:shape="ring"
        android:thicknessRatio="2"
        android:useLevel="false" >
        <solid android:color="@color/button_blue_two" />
    </shape>
</item>

dan Anda tidak perlu repot dengan aspek rasio lebar dan tinggi jika Anda menggunakan ini untuk tampilan teks


0
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/text_color_green"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

0

bentuk lingkaran dalam file yang dapat ditarik Android XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1.5dp"
        android:color="@android:color/holo_red_light" />
    <size
        android:width="120dp"
        android:height="120dp" />
</shape>

Tangkapan layar

masukkan deskripsi gambar di sini


-23

Gunakan saja

ShapeDrawable circle = new ShapeDrawable( new  OvalShape() );

26
Dan bagaimana saya bisa mengatur itu sebagai src dari ImageView di file layout XML saya?
Janusz

Ini tidak secara langsung berlaku untuk kode tata letak xml
François Legrand

1
ini sebenarnya berfungsi. Terima kasih :) val background = ShapeDrawable (OvalShape ()) background.paint.color = ContextCompat.getColor (holder.getView (). Context, R.color.green) lapisan val = arrayOf (latar belakang, sumber daya !!) greenRoundIcon.setImageDrawable (LayerDrawable (lapisan))
David

Sangat tidak disukai, tetapi berhasil dan itu membantu saya, terima kasih
Pavel Shorokhov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.