Android XML 드로어 블 파일에서 원 모양을 정의하는 방법은 무엇입니까?


687

Android 용 XML에서 도형 정의 문서를 찾는 데 문제가 있습니다. XML 파일에 단색으로 채워진 간단한 원을 정의하여 레이아웃 파일에 포함시키고 싶습니다.

안타깝게도 android.com의 설명서에는 Shape 클래스의 XML 속성이 포함되어 있지 않습니다. 원을 그리 려면 ArcShape 을 사용해야한다고 생각 하지만 원호를 아크에서 만드는 데 필요한 크기, 색상 또는 각도를 설정하는 방법에 대한 설명은 없습니다.


3
셰이프 드로어 블을 만드는 방법에 대해 읽을 수 있습니다. developer.android.com/guide/topics/resources/…
— Mario Kutlev


그 이후로 Android Dev 설명서가 개선되었습니다. 이제 android:shape요소 드로어 블 리소스를 다룹니다 .
— naXa

답변:


1514

이것은 안드로이드에서 드로어 블과 같은 간단한 원입니다.

<?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
그리고 색상을 동적으로 변경하는 방법은 무엇입니까?
— Ankit Garg

5
@AnkitGarg 당신은 자바 코드에서 컬러 필터를 적용 할 수 있습니다 (드로어 블 클래스 참조)
— milosmns

7
나는 시도 dp하고 타원형 모양으로 왜곡되었습니다. 나를 위해 pt대신 고정 하여 사용 하십시오.
— Tyler

13
나중에보기의 정사각형 크기를 정의하는 경우 sizein이 필요하지 않습니다 shape.
— Ferran Maylinch

2
그 모양은 타원형이며 둥글 지 않습니다. 누구나 확인할 수 있습니까 ??
— Tarun

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
좋은 해결책. 물론 타원은 뷰의 너비와 높이가 동일하면 원으로 나타납니다. 뷰의 크기에 관계없이 원으로 표시하는 방법이 있다고 생각합니다.
— Ferran Maylinch

2
@FerranMaylinch "보기의 크기에 관계없이 원으로 표시하는 방법이 있다고 생각합니다." 고정 너비 / 높이로 ImageView (원이 "src"드로어 블임)를 감싸는 RelativeLayout과 텍스트를 감싸는 TextView (예 : 텍스트)를 모두 사용하여이 문제를 해결했습니다.
— Michele

나는 똑같은 일을하고 있지만 원은 타원으로 그려집니다
— 버그는

런타임에 다른 테두리 색상으로 텍스트 뷰를 중심으로 만들려면 어떻게해야합니까?
— Anshul Tyagi

@AnshulTyagi 전화를 걸고 yourView.getBackground()수동으로 색상을 설정하여 그렇게 할 수 있다고 생각합니다 . 적절한 유형으로 캐스팅해야합니다 ShapeDrawable. 이에 관한 SO에 관한 질문이 있습니다.
— 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 / drawable /

  • 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">
    <gradient android : startColor = "# FFFF0000"android : endColor = "# 80FF00FF"
            android : angle = "270"/>
</ shape>


46

아래와 같이 VectorDrawable 을 사용할 수 있습니다 .

<?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 ...
— Boris Treukhov

2
@Riyas pathData 부분을 설명 할 수 있습니까? 그 좌표가 의미하는 바는 무엇입니까?
— 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
<corners />타원형으로 무엇을합니까 (내 생각에는 모서리가 없음)?
— Scott Biggs

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.

여기에 이미지 설명을 입력하십시오


정말 좋습니다! 속성이 직관적이지 않기 때문에 확실히 약간의 시간이 걸립니다. 매번 테두리에 멋진 빈 원을 표시하도록했습니다. 패딩을 사용하여 전체 원이 표시되도록 할 수 있습니다.
— Scott Biggs

2

어떤 이유로 ConstraintLayout 안에 원을 그릴 수 없었습니다. 위의 답변을 사용할 수 없었습니다.

완벽하게 작동 한 것은 "Alt + 7"을 누를 때 나오는 텍스트가있는 간단한 TextView입니다.

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

매우 영리한! 누군가가 이것을 유용하게 사용할 것이라고 확신합니다.
— Scott Biggs

매우 유용하고 훌륭합니다 ..
— Mahbubur Rahman Khan

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
그리고 XML 레이아웃 파일에서 ImageView의 src로 어떻게 설정할 수 있습니까?
— Janusz

이것은 XML 레이아웃 코드에는 직접 적용되지 않습니다
— François Legrand

1
이것은 실제로 작동합니다. 감사합니다 :) val background = ShapeDrawable (OvalShape ()) background.paint.color = ContextCompat.getColor (holder.getView (). context, R.color.green) val layer = arrayOf (background, resource !!) greenRoundIcon.setImageDrawable (LayerDrawable (layers))
— David

매우 싫어하지만 효과가 있으며 도움이됩니다
— Pavel Shorokhov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.