[英]How to add a drop shadow effect to a circular ImageView in Android?
我的布局中有一个ImageView,它是圆形的。 我想对ImageView1产生阴影效果。任何人都告诉我该怎么做? 我的代码如下:
main.xml中
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/view88"
android:layout_alignParentLeft="true"
android:src="@drawable/hh" />
可绘制文件夹中的hh.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadiusRatio="3"
android:thickness="10dp"
android:useLevel="false">
<solid android:color="#FFFFFF" />
<stroke android:width="5dp" android:color="#FFFFFF" />
<gradient
android:centerColor="@android:color/darker_gray"
android:endColor="@android:color/darker_gray"
android:startColor="@android:color/darker_gray" />
<size android:height="140dp"
android:width="120dp" />
</shape>
我知道这个问题很老,但这是我的解决方案。 我无法在椭圆形的笔划中添加渐变。 渐变总是到达圆的中心。 解决这个问题的方法是创建一个图层列表并制作5个同心圆,每个小1pd,添加自己的阴影。
因此,要为圆形ImageView(180x180)制作投影,并且阴影从#1A000000到#00000000,我做了:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#00000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
<item
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp">
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#05000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
<item
android:top="2dp"
android:right="2dp"
android:bottom="2dp"
android:left="2dp">
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#0A000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
<item
android:top="3dp"
android:right="3dp"
android:bottom="3dp"
android:left="3dp">
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#0F000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
<item
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#15000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
<item
android:top="5dp"
android:right="5dp"
android:bottom="5dp"
android:left="5dp">
<shape
android:shape="oval">
<stroke android:width="1dp"
android:color="#1A000000" />
<size
android:width="190dp"
android:height="190dp"/>
</shape>
</item>
</layer-list>
如果您有棒棒糖或以上,您可以使用:
public static void setOvalElevationToView(final View view) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP)
view.setOutlineProvider(new ViewOutlineProvider() {
@TargetApi(VERSION_CODES.LOLLIPOP)
@Override
public void getOutline(View view, Outline outline) {
final int size = view.getWidth();
outline.setOval(0, 0, size, size);
}
});
}
您可能还需要禁用视图父级的剪辑,以便不会剪切阴影
难道你不能使用分层绘图并添加另一个环形或圆形,下面有一个小的偏移量来创建一个投影效果?
就像是 :
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/shadow"
android:id="@id/shadow"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
<item
android:drawable="@drawable/hh"
android:id="@id/ring"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>
shadow
就像是
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="circle">
<gradient
android:centerColor="@android:color/darker_gray"
android:endColor="@android:color/darker_gray"
android:startColor="@android:color/darker_gray" />
<size android:height="140dp"
android:width="120dp" />
</shape>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.