2010-09-09 40 views
10

Tôi đang cố gắng vẽ một hình chữ nhật tròn với đường viền xung quanh nó bằng cách sử dụng một lớp mở rộng ShapeDrawable (xem here) và mọi thứ đang hoạt động ngoại trừ việc định hình có vẻ là cắt một số biên giới vì hình dạng chính nó không mở rộng ra ngoài những giới hạn đó.Bù đắp hình dạng trong một ShapeDrawable

Không có cách nào để bù đắp nơi hình vẽ có thể vẽ được bắt đầu vẽ sao cho có một số phần đệm giữa các giới hạn của hình dạng và khung vẽ? Tôi đã thử cả hai ShapeDrawable.setBounds để lớn hơn kích thước nội tại của Shape và ShapeDrawable.setPadding nhưng dường như không nhận được bất cứ nơi nào. Tôi có nên phân lớp Có thể draw thay thế không?

Trả lời

21

Bạn có thể quấn bạn hình drawable với inset (inset_shape.xml):

<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/your_shape_drawable" android:insetBottom="10dip" 
    android:insetLeft="10dip" android:insetRight="10dip" android:insetTop="10dip" 
    android:visible="true" /> 

Sau đó, chỉ cần sử dụng inset_shape như bạn cần.

+2

Cảm ơn, tôi đã tạo một InsetDrawable trong mã: [new InsetDrawable (hình dạng, x, x, x, x)] và chuyển cho thay vào đó giải quyết được. InsetDrawable dường như ẩn một chút trong tài liệu - rất hữu ích –

+2

Tôi chỉ thấy rằng thay vì chuyển android: drawable, bạn cũng có thể lồng drawable, vì vậy bạn không cần hai tệp. Không biết tại sao tôi lại nghĩ rằng điều này là không thể. – velis

0

Hãy thử điều này trong bản vẽ của bạn ...!

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

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

    <stroke 
     android:width="2dp" 
     android:color="#808080" /> 

    <corners android:radius="10dp" /> 

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

</shape> 
+0

Đệm không hoạt động đối với tôi – Gilian

Các vấn đề liên quan