2010-10-18 22 views
5

Nếu tôi vẽ hình dạng vòng tròn theo mã, tôi có thể sử dụng setShadowLayer để vẽ bóng cho hình dạng. Có tương đương khi xác định các hình dạng trong XML không?Có tương đương với setShadowLayer khi xác định hình dạng trong XML trong Android không?

Ví dụ sau đây vẽ một nền thẳng tròn thành hình dạng. Tôi cần thêm gì để thêm bóng vào hình dạng? Thậm chí có thể sử dụng XML không?

shape_test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#8067BF6A"/>  
    <stroke android:width="3dp" android:color="#80000000" /> 
    <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> 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:padding="10dp" 
android:background="#ffdddddd" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<Button android:background="@drawable/shape_test" 
android:padding="5dp" 
android:textStyle="bold" 
android:textSize="28sp" 
android:text="Hello" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 
</LinearLayout> 

Trả lời

5

Sử dụng XML, không có cách nào thực sự để làm được điều này mà tôi biết. Tôi đã nhìn thấy một số gợi ý về việc tạo ra một hộp thứ hai có cùng hình dạng phía sau vật phẩm, và chỉ làm đầy nó bằng màu đen, nhưng tôi không cảm thấy đó là một giải pháp tốt. Tôi đã cố gắng tìm cách để làm điều này bản thân mình trong một thời gian.

Nếu có ích, here's a link cho một câu hỏi tương tự mà tôi đã đăng, cùng với một số mã. Tôi đã nhận được nó làm việc cho một số hình ảnh, nhưng nó vẫn có vẻ gặp khó khăn khi tìm kênh alpha đôi khi. Về cơ bản, tôi đã ghi đè ImageView và đặt này trong phương pháp onDraw():

@Override 
protected void onDraw(Canvas canvas) 
{ 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.omen); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setShadowLayer(5.5f, 6.0f, 6.0f, Color.BLACK); 
    canvas.drawColor(Color.GRAY); 
    canvas.drawRect(50, 50, 50 + bmp.getWidth(), 50 + bmp.getHeight(), paint); 
    canvas.drawBitmap(bmp, 50, 50, null);   
} 

đó đã được chỉ là thử nghiệm, mặc dù, vì vậy rõ ràng là rất nhiều các thông số sẽ phải chung chung hơn. Tôi đã không có nhiều thời gian để làm việc trên nó gần đây mặc dù, nhưng có lẽ điều này sẽ giúp bạn tìm thấy câu trả lời của bạn.

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