Як визначити форму кола у файлі, що малюється Android XML?


687

У мене є проблеми з пошуку документації визначень фігур у XML для Android. Я хотів би визначити простий круг, заповнений суцільним кольором у XML-файлі, щоб включити його до моїх файлів компонування.

На жаль, Документація на android.com не охоплює атрибутів XML класів Shape. Я думаю, що я повинен використовувати форму ArcShape, щоб намалювати коло, але немає пояснення щодо встановлення розміру, кольору чи кута, необхідного для створення кола з дуги.


3
Тут ви можете прочитати про те, як створити форму, що малюється: developer.android.com/guide/topics/resources/…
Маріо Кутлев

Ви можете отримати коло xml від тут developer.android.com/samples/WearSpeakerSample/res/dravable/…
Шахаб Рауф

З цього часу вдосконалена документація на Android Dev. Тепер він охоплює android:shapeелемент - Джерела ресурсів .
naXa

Відповіді:


1514

Це просте коло, як малювати в 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
І як динамічно змінити колір?
Анкіт Гарг

5
@AnkitGarg можна застосувати кольоровий фільтр з коду Java (див. Клас Dravable)
milosmns

7
Я спробував, dpі це перекрутилося в овальну форму. Для мене, використовуючи ptзамість цього виправлене.
Тайлер

13
Немає необхідності sizeв, shapeякщо ви згодом визначите розмір квадрата для подання.
Ферран Мейлінч

2
Його форма овальна, а не кругла. Чи може хто-небудь підтвердити ??
Тарун

762

Встановіть це як фон перегляду

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

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

Для твердого кола використовують:

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

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

Твердий від удару:

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

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

Примітка . Щоб ovalформа виглядала як коло, у цих прикладах або ваш погляд на те, що ви використовуєте цю фігуру як її фон, повинен бути квадратним, або ви повинні встановити значення heightта widthвластивості тегу форми на рівне значення.


2
Приємне рішення. Звичайно, овал виглядає як коло, якщо ширина і висота виду однакові. Я думаю, що був спосіб зробити так, щоб він виглядав як коло незалежно від розміру перегляду.
Ферран Мейлінч

2
@FerranMaylinch "Я думаю, що був спосіб зробити так, щоб воно виглядало як коло незалежно від розміру перегляду". Я вирішив це, використовуючи RelativeLayout, що обертає як ImageView (з колом, як "src", що малюється) з фіксованою шириною / висотою, так і TextView, який обертає текст (наприклад).
Мішель

Я роблю абсолютно те саме, але коло намальовано як овал
помилки трапляються

Що робити, якщо він нам потрібен, щоб створити навколо перегляду тексту різні кольори меж під час виконання?
Аншул Тяги

@AnshulTyagi Я вважаю, що ви можете це зробити, зателефонувавши yourView.getBackground()та встановивши колір вручну. вам потрібно передати його належному типу ShapeDrawable. На цю тему є відповідні запитання.
M. Reza Nasirloo

93

Код для простого кола

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

Подивіться в зразки Android SDK. У проекті ApiDemos є кілька прикладів:

/ ApiDemos / res / Dravable /

  • black_box.xml
  • shape_5.xml
  • тощо

Це буде виглядати приблизно так для кола з градієнтним заповненням:

<? xml version = "1.0" encoding = "utf-8"?>
<shape xmlns: android = "http://schemas.android.com/apk/res/android" android: shape = "oval">
    <градієнт android: startColor = "# FFFF0000" android: endColor = "# 80FF00FF"
            android: angle = "270" />
</shape>


46

Ви можете використовувати VectorDravable, як показано нижче:

<?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 відображається як:

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


Гей, у мене прокладка між колом і вікном перегляду. Ви можете мені допомогти?
Ajeet

1
@Ajeet ви можете змінити розмір вікна перегляду, і ви можете помістити свій шлях до групи та вказати переклад та масштаб<group android:translateX="-10" android:translateY="15"><path ...
Борис Треухов

2
@Riyas чи можете ви пояснити частину pathData? що ці координати означають?
Даршан Міскін

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
Що робити <corners />в овалі (який, на мій погляд, не має кутів)?
Скотт Біггс

18

Якщо ви хочете коло , як це

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

Спробуйте використовувати код нижче:

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

17

Ось простий circle_background.xml для попереднього матеріалу:

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

Ви можете використовувати з атрибутом 'android:background="@drawable/circle_background"у визначенні макета кнопки


+ додайте "розмір" до форм (и) (залежно від використання).
TouchBoarder

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>

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


4

Ви можете спробувати це -

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

Також ви можете регулювати радіус кола, регулюючи android:thickness.

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


Це справді приємно! Це, звичайно, займає деякі ігри, оскільки атрибути не є інтуїтивно зрозумілими. Мені вдалося це зробити, щоб кожен раз відображати приємне порожнє коло для межі. І ви можете використовувати підкладки, щоб переконатися, що відображається весь круг.
Скотт Біггс

2

Я не міг з якихось причин намалювати коло всередині свого ConstraintLayout, я просто не міг використати жодної з наведених вище відповідей.

Що ідеально спрацювало - це простий TextView з текстом, який виходить, коли ви натискаєте "Alt + 7":

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

Дуже розумний! Я впевнений, що хтось знайде це корисним.
Скотт Біггс

дуже корисно, чудово ..
Махбубур Рахман Хан

1

Ви можете спробувати скористатися цим

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

і вам не доведеться турбувати співвідношення сторін ширини та висоти, якщо ви використовуєте це для перегляду тексту


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

форма кола у файлі, що малюється 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>

Знімок екрана

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


-23

Просто використовуйте

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

26
І як я можу встановити це як src ImageView у моєму файлі макета XML?
Януш

Це не застосовується безпосередньо для кодування макета xml
François Legrand

1
це насправді працює. Дякую :) val background = ShapeDravable (OvalShape ()) background.paint.color = ContextCompat.getColor (hold.getView (). Контекст, R.color.green) шари val = arrayOf (фон, ресурс !!) greenRoundIcon.setImageDravable (LayerDravable (шари))
Девід

Так не подобається, але це працює і мені це допомагає, дякую
Павло Шорохов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.