Skip to content

Instantly share code, notes, and snippets.

@PeterAttardo
Last active May 12, 2022 08:13
Show Gist options
  • Save PeterAttardo/cc722b7649d0e62274b2 to your computer and use it in GitHub Desktop.
Save PeterAttardo/cc722b7649d0e62274b2 to your computer and use it in GitHub Desktop.
Android Shadow Drawing
package com.example.util.shadow;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.GradientDrawable;
import android.view.View;
import static android.graphics.drawable.GradientDrawable.Orientation.LEFT_RIGHT;
import static android.graphics.drawable.GradientDrawable.Orientation.TOP_BOTTOM;
import static android.graphics.drawable.GradientDrawable.RADIAL_GRADIENT;
public class Shadow {
private static final int START_COLOR = Color.parseColor("#55000000");
private static final int END_COLOR = Color.parseColor("#00000000");
private static final int SHADOW_LENGTH = (int) (5 * Resources.getSystem().getDisplayMetrics().density);
private static GradientDrawable linearGradient;
private static GradientDrawable radialGradient;
private static int[] colors;
static {
colors = new int[]{START_COLOR, END_COLOR};
linearGradient = new GradientDrawable(TOP_BOTTOM, colors);
radialGradient = new GradientDrawable();
radialGradient.setGradientType(RADIAL_GRADIENT);
radialGradient.setColors(colors);
radialGradient.setGradientRadius(SHADOW_LENGTH);
}
public static void onDraw(View view, Canvas canvas) {
int height = view.getHeight();
int width = view.getWidth();
linearGradient.setBounds(SHADOW_LENGTH, height, width, height + SHADOW_LENGTH);
linearGradient.setOrientation(TOP_BOTTOM);
linearGradient.draw(canvas);
linearGradient.setBounds(width, SHADOW_LENGTH, width + SHADOW_LENGTH, height);
linearGradient.setOrientation(LEFT_RIGHT);
linearGradient.draw(canvas);
radialGradient.setBounds(0, height, SHADOW_LENGTH, height + SHADOW_LENGTH);
radialGradient.setGradientCenter(1, 0);
radialGradient.draw(canvas);
radialGradient.setBounds(width, height, width + SHADOW_LENGTH, height + SHADOW_LENGTH);
radialGradient.setGradientCenter(0, 0);
radialGradient.draw(canvas);
radialGradient.setBounds(width, 0, width + SHADOW_LENGTH, SHADOW_LENGTH);
radialGradient.setGradientCenter(0, 1);
radialGradient.draw(canvas);
}
}
@zenanhu
Copy link

zenanhu commented Jul 8, 2016

If you want to use Paint.setShadowLayer(), you must disable hardware acceleration.

@wenqin-231
Copy link

I try to change to change it into a custom View and it is not work.
There is not any shadow in it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment