36

私はこれに関するコード例を広範囲に検索しましたが、何も見つかりません。

特に、ImageViewで使用しているpngドローアブルに影を付けたいと思っています。このpngドローアブルは、角が透明な丸みを帯びた長方形です。

誰かがコードまたはXMLのいずれかでビューに適切なドロップシャドウを追加する方法のコード例を提供できますか?

4

5 に答える 5

34

Bitmap.extractAlphaとBlurMaskFilterの組み合わせを使用して、表示する必要のある画像のドロップシャドウを手動で作成できますが、プロセスに費用がかかるため、画像がたまにロード/表示される場合にのみ機能します。

擬似コード(コンパイルさえするかもしれません!):

BlurMaskFilter blurFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER);
Paint shadowPaint = new Paint();
shadowPaint.setMaskFilter(blurFilter);

int[] offsetXY = new int[2];
Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY);

/* Might need to convert shadowImage from 8-bit to ARGB here, can't remember. */

Canvas c = new Canvas(shadowImage);
c.drawBitmap(originalBitmap, offsetXY[0], offsetXY[1], null);

次に、shadowImageをImageViewに配置します。この画像が変更されることはなく、多く表示される場合は、画像を作成してonCreateにキャッシュし、高価な画像処理をバイパスすることができます。

それがそのままではうまくいかない場合でも、正しい方向に進むには十分なはずです。

于 2010-08-25T18:18:34.860 に答える
29

ドロップシャドウの場合、以下のコードを使用します

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <gradient
    android:startColor="#ffffff"
    android:centerColor="#d3d7cf"
    android:endColor="#2e3436"
    android:angle="90" />
</shape>

ビューの背景に上記のドローアブルを使用

<View 
    android:id="@+id/divider" 
    android:background="@drawable/black_white_gradient"
    android:layout_width="match_parent" 
    android:layout_height="10sp"
    android:layout_below="@+id/buildingsList"/>
于 2011-12-05T17:23:45.903 に答える
14

これはシャドウを機能させるのに役立ったので、機能するコードを共有したいと思いました。

private Bitmap createShadowBitmap(Bitmap originalBitmap) {
    BlurMaskFilter blurFilter = new BlurMaskFilter(5, BlurMaskFilter.Blur.OUTER);
    Paint shadowPaint = new Paint();
    shadowPaint.setMaskFilter(blurFilter);

    int[] offsetXY = new int[2];
    Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY);

    /* Need to convert shadowImage from 8-bit to ARGB here. */
    Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true);
    Canvas c = new Canvas(shadowImage32);
    c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null);

    return shadowImage32;
}
于 2014-05-06T06:18:41.767 に答える
7

API 21(5.0)+の場合は、説明を追加android:elevation="4dp"またはandroid:translationZ="4dp"表示します。ドキュメンテーション

標高属性

于 2016-07-01T01:00:05.147 に答える
1

どの色にもくっつくことができるように、常に透明な影を使用してください。

shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <gradient
    android:startColor="#002e3436"
    android:endColor="#992e3436"
    android:angle="90" />
</shape>

そしてビューで

<View 
    android:id="@+id/divider" 
    android:background="@drawable/shadow"
    android:layout_width="match_parent" 
    android:layout_height="5dp"/>
于 2017-03-14T07:52:10.777 に答える