2013-11-24 14 views
11

Tôi cần phải tạo đường viền với các góc tròn được lập trình bằng cách mở rộng ShapeDrawable. Tôi cần phải có một biên giới màu đen với các góc tròn với các điểm ảnh ở bên ngoài là màu trắng và các điểm ảnh bên trong được minh bạch. Mã tôi có tại thời điểm này có nhiều vấn đề, trong đó là nó không tạo ra một góc trơn tru có cùng độ dày như đường viền và các pixel ngoài của đường viền là trong suốt và không phải màu trắng.Làm thế nào để lập trình một biên giới có viền tròn bằng cách sử dụng ShapeDrawable trong android?

Đây là một hình ảnh của các góc Tôi hiện đang nhận được corner

Đây là mã nơi tôi đi qua Color.TRANSPARENT cho 'điền' trong constructor:

public class CustomShape extends ShapeDrawable { 
private final Paint fillpaint, strokepaint; 
public CustomShape(int fill, int strokeWidth,int radius) { 

    super(new RoundRectShape(new float[] { radius, radius, radius, radius, radius, radius, radius, radius }, null, null)); 
    fillpaint = new Paint(this.getPaint()); 
    fillpaint.setColor(fill); 
    strokepaint = new Paint(fillpaint); 
    strokepaint.setStyle(Paint.Style.STROKE); 
    strokepaint.setStrokeWidth(strokeWidth); 
    strokepaint.setColor(Color.BLACK); 
} 



@Override 
protected void onDraw(Shape shape, Canvas canvas, Paint paint) { 
    shape.draw(canvas, fillpaint); 
    shape.draw(canvas, strokepaint); 
} 

}

+0

cố gắng để mở rộng drawable (và làm một dtaw tùy chỉnh) thay vì ShapeDrawable? – pskink

Trả lời

0

Bạn có thể thực hiện tùy chỉnh có thể vẽ. Sau đây là ví dụ về xml.

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

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

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

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

Lưu xml này vào thư mục có thể kéo của dự án của bạn. Bây giờ sử dụng nó như một drawable bình thường cho bất kỳ widget. Ví dụ: android: background = "R.drawable.round_shape"

Ví dụ này được tham chiếu sau link.

13

Nếu bạn cần đều làm tròn góc (và từ ví dụ của bạn có vẻ như bạn làm) bạn chỉ có thể sử dụng GradentDrawable với một màu rắn

GradientDrawable gd = new GradientDrawable(); 
gd.setColor(Color.RED); 
gd.setCornerRadius(10); 
gd.setStroke(2, Color.WHITE); 

view.setBackground(gd); 

tài liệu GradientDrawable thể được tìm thấy here.

Edit: Đối với mỗi góc riêng

Bạn có thể chỉ định bán kính của mỗi góc riêng sử dụng setCornerRadii (float[] radii) phương pháp. "Đối với mỗi góc, mảng chứa 2 giá trị, [X_radius, Y_radius]. Các góc được đặt trên cùng bên trái, trên cùng bên phải, dưới cùng bên phải, dưới cùng bên trái. Thuộc tính này chỉ được vinh danh khi hình dạng thuộc loại RECTANGLE.

Đó là khuyến cáo để gọi mutate() trước khi thay đổi thuộc tính này.

+0

Có khả năng xác định leftCornerRadius và rightCornerRadius không? – Chandru

+0

bổ sung thêm ghi chú cách mỗi góc có thể được làm tròn riêng – SGal

0

Ngoài ra để xác định góc tròn dimens bạn có thể sử dụng GradientDrawable và phương pháp setCornerRadii()

GradientDrawable d = new GradientDrawable(); 
d.setCornerRadii({5.0f,5.0f,5.0f,5.0f}); 
textViewExample.setBackgroundResource(d); 
0
GradientDrawable drawable = (GradientDrawable)image.getBackground(); 
drawable.setGradientRadius(radiuspx); 
Các vấn đề liên quan