CardView
或自定义视图实现图片添加阴影效果。在Android开发中,为图片添加阴影效果是一种常见的需求,通过实现这种效果,可以增强用户界面的视觉层次感和美观度,本文将详细介绍两种主要的方法来实现图片阴影效果:使用自定义Drawable和使用自定义View,以下是具体分析:
方法一:使用自定义Drawable
1、定义Layer-List
阴影层:show_view.xml
中定义了阴影层,通过layer-list
标签嵌套两个形状(Shape),阴影层使用了黑色半透明的颜色,并设置了圆角半径。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="5dp" android:top="5dp"> <shape> <corners android:radius="25dp"/> <solid android:color="#60000000"/> </shape> </item> <item android:bottom="5dp" android:right="5dp"> <shape> <corners android:radius="25dp"/> <solid android:color="#000000"/> </shape> </item> </layer-list>
背景层:背景层与阴影层类似,但颜色为纯黑色,并且位置相对于阴影层有所偏移。
2、应用到控件:在main.xml
中,将自定义的Drawable作为背景应用到TextView上。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.liusiyutaloner.frescotest.MainActivity"> <TextView android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/shadow_view"/> </RelativeLayout>
3、优缺点分析:这种方法简单直接,适用于静态图片或控件的背景设置,阴影效果是实边的,没有虚化效果,不够真实。
方法二:使用自定义View
1、创建CustomShadowView类
构造函数:初始化Paint对象,并设置抗锯齿属性。
onDraw方法:在该方法中绘制阴影和实际图像,使用setShadowLayer
方法设置阴影参数,包括模糊半径、X轴和Y轴的偏移量以及阴影颜色,然后绘制一个圆角矩形来模拟带有阴影的图片。
public class CustomShadowView extends View { private Paint mPaint; public CustomShadowView(Context context, AttributeSet attrs) { super(context, attrs); mPaint = new Paint(); mPaint.setColor(Color.BLACK); this.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setShadowLayer(10F, 15F, 15F, Color.GRAY); RectF rect = new RectF(0, 0, 200, 200); canvas.drawRoundRect(rect, (float)75, (float)75, mPaint); } }
2、在布局文件中使用CustomShadowView:将自定义的CustomShadowView
添加到布局文件中。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.liusiyutaloner.frescotest.MainActivity"> <com.example.liusiyutaloner.frescotest.CustomShadowView android:layout_gravity="center" android:layout_width="125dp" android:layout_height="125dp"/> </RelativeLayout>
3、优缺点分析:这种方法更加灵活,可以实现更复杂的阴影效果,包括虚化效果,但是需要编写额外的Java代码,并且对于动态图片的处理可能较为复杂。
方法三:使用第三方库
1、引入库:在项目的build.gradle
文件中引入SCardView库。
compile 'io.github.meetsl:SCardView:1.0'
2、布局文件:在布局文件中使用SCardView
包裹需要添加阴影的控件。
<io.github.meetsl.SCardView xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" app:card_shadowColor="#aa22ff22" app:card_shadowRadius="10dp" app:card_elevation="5dp"> <TextView android:id="@+id/test_shadow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="60sp" android:textColor="#cc000000" android:text="Test Shadow"/> </io.github.meetsl.SCardView>
3、优缺点分析:这种方法简化了开发过程,不需要手动编写阴影逻辑,且效果较好,但是需要依赖外部库,可能会增加应用的体积。
为Android图片添加阴影效果有多种方法,每种方法都有其适用场景和优缺点,开发者可以根据具体需求选择合适的方法来实现所需的效果。