如何将阴影应用于ImageView?

时间:2011-12-02 07:39:21

标签: android android-imageview textview shadow

我想将阴影应用于ImageView。当我将阴影应用于TextView我得到了它但是同样没有达到ImageView。我该如何解决这个问题?

7 个答案:

答案 0 :(得分:5)

我们也可以使用提供圆角背景和阴影的CardView。要使用它,您需要将v7 CardView library作为依赖项添加到build.gradle中的项目,如下所示。

dependencies {
    compile 'com.android.support:cardview-v7:23.0.1'
    -------
}
  

注意:使用受尊重的版本更改上一行中的23.0.1

因此我将ImageViewCardView包围,以制作如下阴影。

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/white">

    <ImageView
        android:id="@+id/dish_image"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:adjustViewBounds="true" />

</android.support.v7.widget.CardView>

它会在图像周围添加阴影。

  

注意:我不知道这是否是一个好的解决方法。我是初学者。一世   试图实现CardView,它提供了实现的想法   同样的。如果不好,请告诉我原因。

答案 1 :(得分:2)

这取自Romain Guy在Devoxx的演讲,pdf发现here

Paint mShadow = new Paint(); 
// radius=10, y-offset=2, color=black 
mShadow.setShadowLayer(10.0f, 0.0f, 2.0f, 0xFF000000); 
// in onDraw(Canvas) 
canvas.drawBitmap(bitmap, 0.0f, 0.0f, mShadow);

希望这有帮助。

备注

不要忘记Honeycomb及以上你需要调用setLayerType(LAYER_TYPE_SOFTWARE, mShadow),否则你将看不到你的影子! (@Dmitriy_Boichenko)

不幸的是,

SetShadowLayer不适用于硬件加速,因此大大降低了性能(@Matt Wear)

摘自Here

对于Api大于21。 您可以在imageview或按钮中尝试xml:Read here at developer site

android:elevation="5dp"

答案 2 :(得分:1)

您可以创建一个可绘制的图层列表,并将两个项目(drawables)放入其中以获取图像和阴影。

你的影子项目位置&amp;内容可能会根据您想要应用阴影的位置(顶部,左侧,右侧,右侧和左侧等)和阴影样式而改变。

答案 3 :(得分:1)

创建文件shadow_rect.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item >
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/darker_gray" />
            <corners android:radius="0dp"/>
        </shape>
    </item>
    <item android:right="1dp"  android:bottom="2dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="1dp"/>
        </shape>
    </item>

</layer-list>

在你的Imageview中使用它作为 android:background =“@ drawable / shadow_rect

答案 4 :(得分:0)

用于圆形图像的阴影

<de.hdodenhof.circleimageview.CircleImageView
        android:src="@drawable/ic_your_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:elevation="8dp"
        android:layout_marginTop="32dp"
        android:id="@+id/imageView"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"/>

依赖性:

implementation 'de.hdodenhof:circleimageview:3.0.0'

输出:

enter image description here

答案 5 :(得分:0)

ImageView

  <ImageView
     ......
  android:elevation="2dp"
  android:background="@drawable/myrect"/>

背景可绘制对象定义为带有圆角的矩形:

<!-- res/drawable/myrect.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
    <solid android:color="#42000000" />
    <corners android:radius="5dp" />
</shape>

答案 6 :(得分:0)

您可以使用属性outlineSpotShadowColor

将阴影设为 true ,尝试使用setOutlineSpotShadowColor的{​​{1}}并将@color/black增加到12dp

使用elevation将阴影置于 false setOutlineSpotShadowColor并减小@android:color/transparent