2010-10-18 11 views
5

Kodla bir yuvarlak doğrultu şekli çizersem şekil için çizilmiş bir gölge almak için setShadowLayer kullanabilirim. XML'de şekilleri tanımlarken bir eşdeğer var mı?Android'de XML'deki şekilleri tanımlarken setShadowLayer öğesine bir eşdeğer var mı?

Aşağıdaki örnek, bir şekle yuvarlak doğrultu arka planı çizer. Şekle eklenen bir gölgeyi eklemek için neye eklemek gerekir? XML kullanarak bile mümkün mü?

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 kullanma

<?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> 

cevap

5

, Bildiğim kadarıyla bunu yapmanın hiçbir gerçek yolu yoktur. Öğenin arkasında aynı şekildeki ikinci bir kutu yapmanın bazı önerilerini gördüm ve sadece siyahla doldurdum, ama bunun iyi bir çözüm olduğunu hissetmiyorum. Bunu bir süreliğine yapmak için bir yol bulmaya çalışıyorum.

Yardımcı olurum, benzer bir soruyu here's a link, bazı kodlarla birlikte gönderir. Bazı görüntüler için çalışıyorum, ancak hala alfa kanalı bulmakta zorlanıyor gibi görünüyor. Temelde, ImageView geçersiz kıldık ve onDraw() yönteminde bu koyun:

sadece olsa, test ediyordum
@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);   
} 

, çok açıktır ki parametrelerin çok daha genel olması gerekir. Son zamanlarda üzerinde çalışmak için fazla zamanım olmadı, ama belki bu senin cevabını bulmana yardımcı olacak.