Creating a shadow around a canvas drawn shape?
No need for a Bitmap, just needed to set the layer type to LAYER_TYPE_SOFTWARE
the original approach worked.
public class TestShapeShadow extends View{ Paint paint; public TestShapeShadow(Context context) { super(context); paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setShadowLayer(12, 0, 0, Color.YELLOW); // Important for certain APIs setLayerType(LAYER_TYPE_SOFTWARE, paint); } @Override protected void onDraw(Canvas canvas) { canvas.drawRect(20, 20, 100, 100, paint); }}
I followed the ideas of @pskink above and found a solution.I put the code snippet here for anyone in need.
If you wonder what shadow properties are, you can refer to this tester:https://okawa-h.github.io/box-shadow_tester/
public class MyViewWithShadow extends View { Paint paint; int mainColor; int shadowColor; // shadow properties int offsetX = -25; int offsetY = 30; int blurRadius = 5; public MyViewWithShadow(Context context) { super(context); mainColor = Color.RED; shadowColor = Color.BLACK; // this color can also have alpha paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.FILL); } @Override protected void onDraw(Canvas canvas) { // Create paint for shadow paint.setColor(shadowColor); paint.setMaskFilter(new BlurMaskFilter( blurRadius /* shadowRadius */, BlurMaskFilter.Blur.NORMAL)); // Draw shadow before drawing object canvas.drawRect(20 + offsetX, 20 + offsetY, 100 + offsetX, 100 + offsetY, paint); // Create paint for main object paint.setColor(mainColor); paint.setMaskFilter(null); // Draw main object canvas.drawRect(20, 20, 100, 100, paint); }}