Hình tròn trong suốt có viền


83

Tôi đang cố gắng tạo một vòng kết nối chỉ có đường viền bằng cách sử dụng XML trong android:

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

<stroke android:width="1dp"
    android:color="#000000"/>

</shape>

Mã tôi đã sử dụng được đăng ở trên. Tuy nhiên, tôi nhận được một đĩa rắn chứ không phải một chiếc nhẫn. Tôi muốn nhận đầu ra chỉ bằng XML chứ không phải canvas. Tôi đang làm gì sai?

Cảm ơn.

CHỈNH SỬA: Có nó để làm việc nhờ vào câu trả lời bên dưới. Đây là mã cuối cùng của tôi:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9"
    android:useLevel="false" >

    <solid android:color="@android:color/transparent" />

    <size android:width="100dp"
     android:height="100dp"/>

    <stroke android:width="1dp"
    android:color="#FFFFFF"/>

</shape>

Câu trả lời:


186

Hãy thử một cái gì đó như thế này

<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/transparent" />

    <stroke
        android:width="2dp"
        android:color="@android:color/darker_gray" />
</shape>

Cập nhật: được tạo android:thicknessRatio="2"để cung cấp vòng kết nối đầy đủ (sử dụng Nexus 5 - Lollipop)


7
Tôi đã biến nó android:thicknessRatio="2"thành một chiếc nhẫn kín (Nexus 5, Lollipop)
David

Đối với tôi, khu vực bên ngoài vòng tròn không hiển thị là trong suốt.
Nghịch lý

@Paradox hãy thử chế độ xem hình ảnh thay vì nút
Nikunj Patel

1
Làm việc như mong đợi. Câu trả lời hay nhất
Muthukumaaran Chandramohan

33

sử dụng cái này nó sẽ hoạt động

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

<gradient
    android:centerX=".6"
    android:centerY=".40"
    android:endColor="@android:color/transparent"
    android:gradientRadius="20"
    android:startColor="@android:color/transparent"
    android:type="radial" />

<stroke
    android:width="1dp"
    android:color="#FFFFFF" />

<size
    android:height="100dp"
    android:width="100dp" />

</shape>

13

Rỗng

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
        <stroke
            android:width="1dp"
            android:color="@color/indicator_unselected" />
    </shape>

Đầy

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <corners android:radius="100dp" />
    <solid android:color="@android:color/white" />
</shape>

6

Hiệu ứng nét vẽ có thể đạt được khi vẽ một hình bầu dục trong suốt với nét vẽ có màu bắt buộc (# 000 trong ví dụ):

<?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/transparent" />
    <stroke
        android:width="1dp"
        android:color="#000" />
    <size
        android:width="40dp"
        android:height="40dp" />
</shape>

3

Nếu bạn có thể sử dụng Vector vẽ được, hãy thử cái này

<vector android:height="24dp" android:viewportHeight="512.0"
    android:viewportWidth="512.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FFFFFF" android:fillType="evenOdd"
        android:pathData="M0,0L512,0L512,512L0,512L0,0ZM256,511C396.8,511 511,396.8 511,256C511,115.2 396.8,1 256,1C115.2,1 1,115.2 1,256C1,396.8 115.2,511 256,511Z"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
</vector>

2

Bạn có thể sử dụng giá trị sẵn có của android để minh bạch như @android:color/transparenthoặc sử dụng #0000hoặc#00000000

cho ở trên bắt đầu cho 4 chữ số đầu tiên là cho alpha và ở giá trị 8 chữ số, hai chữ số đầu tiên là cho alpha.

Khi bạn chỉ cung cấp màu 3 chữ số hoặc 6 chữ số so với giá trị alpha mặc định là bạn bằng cách chuyển giá trị 4 chữ số hoặc 8 chữ số đặt alpha của giá trị màu đó


1
Xin chào Pratik, tôi không hiểu phần alpha trong câu trả lời của bạn. Tôi đã thêm dòng <solid android: color = "# 0000" /> vào tệp XML. Nhưng vẫn nhận được kết quả tương tự.
Anirudh

alpha này được sử dụng để đặt độ mờ của màu. Nếu bạn đặt 4 0 hoặc 8 0 hơn là nó hoàn toàn minh bạch, với sự gia tăng của 2 chữ số đầu tiên giá rằng 8 0 của chỉ làm tăng giá trị của độ mờ đục
Pratik

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

        <gradient
            android:endColor="@android:color/transparent"
            android:gradientRadius="20"
            android:startColor="@android:color/transparent" />

        <stroke
            android:width="1dp"
            android:color="#d9d9d9" />

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

    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp">
        <shape android:shape="oval" >

            <gradient
                android:endColor="@android:color/transparent"
                android:gradientRadius="20"
                android:startColor="@android:color/transparent" />

            <stroke
                android:width="1dp"
                android:color="#b3b3b3" />

            <size
                android:height="100dp"
                android:width="100dp" />
        </shape>
    </item>
</layer-list>

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

            <stroke
                android:width="4dp"
                android:color="@color/colorPrimaryDark" />
            <corners android:radius="0dp" />
        </shape>
    </item>
    <item
        android:top="1dp"
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp">

        <shape android:shape="oval">
            <solid android:color="@color/colorRed" />
            <size android:height="@dimen/_100sdp"
                android:width="@dimen/_100sdp"></size>
        </shape>

    </item>

</layer-list>

0

Nếu bạn đặt màu thành #00000000, kết quả sẽ trong suốt. Bạn sẽ muốn làm theo cách này nếu bạn muốn thay đổi nó trong tương lai phát triển. Ví dụ, nếu bạn muốn nó có màu đỏ và một phần trong suốt, nó sẽ là #ff000088Hai số cuối cùng là độ mờ. Tôi làm theo cách này để thực hiện các thay đổi trong tương lai dễ dàng hơn.


0
<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:innerRadiusRatio="2"
     android:shape="ring"
     android:thicknessRatio="1"
     android:useLevel="false">

    <gradient
        android:type="radial"
        android:gradientRadius="8dp"
        android:endColor="@color/colorDarkPurple"
        android:elevation="5dp"
    />

    <stroke
        android:width="2dp"
        android:color="@color/colorLilac"/>
</shape>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.