首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Drop Shadow on View

Android Drop Shadow on View
EN

Stack Overflow用户
提问于 2010-08-25 23:05:48
回答 5查看 74.3K关注 0票数 36

我对这方面的代码示例做了一些广泛的搜索,但找不到任何东西。

特别是,我正在寻找添加一个阴影的png绘图,我正在使用的ImageView。此png绘图是一个圆角矩形与透明的角落。

谁能提供一个代码示例,说明如何在代码或XML中为视图添加一个像样的投影?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-26 02:18:35

您可以使用Bitmap.extractAlpha和BlurMaskFilter的组合来手动为需要显示的任何图像创建投影,但只有当您的图像仅偶尔加载/显示时才有效,因为该过程的成本很高。

伪代码(甚至可以编译!):

代码语言:javascript
复制
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中,以绕过昂贵的图像处理。

即使这不能按原样工作,它也应该足以让你朝着正确的方向前进。

票数 33
EN

Stack Overflow用户

发布于 2011-12-06 01:23:46

对于投影,请使用以下代码

代码语言:javascript
复制
<?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>

使用上面的可绘制作为视图的背景

代码语言:javascript
复制
<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"/>
票数 29
EN

Stack Overflow用户

发布于 2014-05-06 14:18:42

这帮助我得到了影子的工作,所以我想分享工作代码:

代码语言:javascript
复制
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;
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3567312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档