Làm thế nào để tạo một hình có góc tròn trên cùng bên trái và góc tròn dưới cùng bên trái?


84

Tôi muốn tạo một hình dạng với góc tròn trên cùng bên trái và góc tròn dưới cùng bên trái:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>    

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
     android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape>

Nhưng hình dạng trên không cho tôi những gì tôi muốn. Nó cho tôi một hình chữ nhật mà không có bất kỳ góc tròn nào.

Câu trả lời:


62

Có vẻ như lỗi http://code.google.com/p/android/issues/detail?id=939 .

Cuối cùng tôi phải viết một cái gì đó như thế này:

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

 <corners android:radius="1dp"
  android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
  android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

Tôi phải chỉ định android: bottomRightRadius = "2dp" cho góc tròn dưới cùng bên trái (một lỗi khác ở đây).


1
Có, tôi có thể xác nhận câu lệnh / lỗi cuối cùng của bạn rằng trái / phải được chuyển sang đó. Tôi cũng trải nghiệm như vậy trong ứng dụng của mình. (sdk 2.1). Bạn đã gửi báo cáo lỗi trên b.android.com về nó chưa hay nó đã được báo cáo ở đó?
Mathias Conradt

3
Tôi vừa gửi một lỗi, code.google.com/p/android/issues/detail?id=9161 . Điều đáng buồn là, sau khi sửa lỗi, tôi phải thay đổi mã của tôi một lần nữa :(
user256239

58

Mặc dù câu hỏi này đã được trả lời (đó là lỗi khiến bottomLeftRadius và bottomRightRadius bị đảo ngược), lỗi đã được sửa trong android 3.1 (api cấp 12 - được thử nghiệm trên trình giả lập).

Vì vậy, để đảm bảo các tệp có thể kéo của bạn trông chính xác trên tất cả các nền tảng, bạn nên đặt các phiên bản "đã sửa" của các tệp có thể kéo (tức là bán kính dưới cùng bên trái / bên phải thực sự chính xác trong xml) trong thư mục res / drawable-v12 của ứng dụng. Bằng cách này, tất cả các thiết bị sử dụng phiên bản android> = 12 sẽ sử dụng tệp có thể vẽ chính xác, trong khi các thiết bị sử dụng phiên bản android cũ hơn sẽ sử dụng tệp có thể kéo "giải pháp thay thế" nằm trong thư mục res / drawables.


4
Một tùy chọn khác là sử dụng values/dimens.xmltệp mặc định có chứa các giá trị bottom_left và bottom_right được đảo ngược và một values-v12/dimens.xmltệp mới có các giá trị chính xác . Bằng cách đó, bạn chỉ có thể giữ một phiên bản duy nhất của tệp XML có thể vẽ và chỉ giá trị dimen được hoán đổi dựa trên phiên bản API.
Joe

35

Từ tài liệu :

LƯU Ý: Mọi góc (ban đầu) phải được cung cấp bán kính góc lớn hơn 1, nếu không, không có góc nào được làm tròn. Nếu bạn muốn các góc cụ thể không bị làm tròn, cách giải quyết là sử dụng android: radius để đặt bán kính góc mặc định lớn hơn 1, nhưng sau đó ghi đè mỗi và mọi góc bằng các giá trị bạn thực sự muốn, cung cấp bằng 0 ("0dp" ) nơi bạn không muốn các góc tròn.

Ví dụ: bạn phải đặt một android:radius="<bigger than 1dp>"để có thể làm những gì bạn muốn:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 

14

Bạn cũng có thể sử dụng các số cực nhỏ cho bán kính của mình '.

<corners 
  android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
 android:topLeftRadius="2dp" android:topRightRadius="0.1dp" />

Đó là lần đầu tiên tôi đã cố gắng ... nhưng không có hy vọng .... Tôi đang thử nghiệm trên Android 2.2 ... Bất kỳ ý tưởng khác ... Cảm ơn
Aamir Shah

12

đối với những người khác, có một giải pháp cho bất kỳ cấp API nào, bạn có thể đặt một mục lên trên từng ví dụ:

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

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

kết quả với màu sáng để hiển thị cho bạn ba mục:

nhập mô tả hình ảnh ở đây

kết quả cuối cùng:

nhập mô tả hình ảnh ở đây

Trân trọng.


8

Lỗi này được nộp ở đây . Đây là lỗi của các thiết bị Android có cấp API nhỏ hơn 12. Bạn phải đặt các phiên bản chính xác của bố cục vào thư mục drawable-v12 sẽ được sử dụng cho API cấp 12 trở lên. Và một phiên bản có lỗi (các góc được chuyển đổi / đảo ngược) của cùng một bố cục sẽ được đưa vào thư mục có thể kéo mặc định sẽ được sử dụng bởi các thiết bị có cấp API nhỏ hơn 12.

Ví dụ: Tôi phải thiết kế một nút với góc tròn ở dưới cùng bên phải.

Trong thư mục 'drawable' - button.xml: Tôi phải làm tròn góc dưới bên trái.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

Trong thư mục 'drawable-v12' - button.xml: Phiên bản chính xác của bố cục đã được đặt ở đây để sử dụng cho API cấp 12 trở lên.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

7

thử đi

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</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.