代码之家  ›  专栏  ›  技术社区  ›  coneybeare

Android在视图上放置阴影

  •  33
  • coneybeare  · 技术社区  · 15 年前

    我已经做了一些广泛的搜索代码的例子,但找不到任何东西。

    特别是,我希望添加一个阴影到png可绘制我在一个ImageView中使用。这个png可绘制的是一个圆角矩形和透明的角落。

    有人能提供一个代码示例,说明如何在代码或XML中为视图添加一个合适的放置阴影吗?

    5 回复  |  直到 15 年前
        1
  •  33
  •   Sri Harsha Chilakapati Vishal Raj    5 年前

    你可以用位图.alpha还有一个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);
    

    即使这不起作用,它应该足以让你朝着正确的方向前进。

        2
  •  29
  •   Thierry Roy    12 年前

    用于代码下方的放置阴影

    <?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"/>
    
        3
  •  14
  •   PeterE    11 年前

    这帮助我让影子工作,所以我想分享工作代码:

    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;
    }
    
        4
  •  7
  •   Artyom    9 年前

    添加 android:elevation="4dp" android:translationZ="4dp" 查看说明。 Documentation

    Elevation Attribute

        5
  •  1
  •   Pradeep Kumar Kushwaha    8 年前

    总是使用透明的阴影,这样他们可以坚持任何颜色。

    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"/>