5

コードで丸い長方形を描く場合、setShadowLayerを使用してその形状に影を描くことができます。XMLで形状を定義するときに同等のものはありますか?

次の例では、丸い長方形の背景を図形に描画します。シェイプに影を追加するには、何を追加する必要がありますか?XMLを使用することも可能ですか?

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

1 に答える 1

5

XMLを使用して、私が知っているこれを行う実際の方法はありません。アイテムの後ろに同じ形の2番目のボックスを作成し、それを黒で塗りつぶすという提案をいくつか見ましたが、それは良い解決策ではないと思います。私はしばらくの間、これを自分で行う方法を見つけようとしてきました。

それが役に立ったら、ここに私が投稿した同様の質問へのリンクといくつかのコードがあります。一部の画像では機能しましたが、それでもアルファチャネルを見つけるのに問題があるようです。基本的に、ImageViewをオーバーライドして、これを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);        
} 

ただし、これは単なるテストであったため、明らかに多くのパラメーターをより一般的にする必要があります。最近はあまり時間がありませんが、答えを見つけるのに役立つかもしれません。

于 2010-10-18T13:15:45.983 に答える