我已经对此进行了一些广泛的代码示例搜索,但找不到任何东西。
特别是,我希望为我在 ImageView 中使用的 png drawable 添加阴影。这个 png drawable 是一个带有透明角的圆角矩形。
有人可以提供一个代码示例,说明如何在代码或 XML 中向视图添加一个像样的阴影吗?
我已经对此进行了一些广泛的代码示例搜索,但找不到任何东西。
特别是,我希望为我在 ImageView 中使用的 png drawable 添加阴影。这个 png drawable 是一个带有透明角的圆角矩形。
有人可以提供一个代码示例,说明如何在代码或 XML 中向视图添加一个像样的阴影吗?
您可以结合使用 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 以绕过昂贵的图像处理。
即使这不起作用,它也应该足以让你朝着正确的方向前进。
For Drop shadow use below code
<?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>
Use above drawable for a background of a view
<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"/>
这帮助我让影子工作,所以我想分享工作代码:
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;
}
对于 API 21(5.0)+ ,添加android:elevation="4dp"
或android:translationZ="4dp"
查看说明。文档
始终使用透明阴影,这样它们就可以粘在任何颜色上。
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"/>