Last active
May 12, 2022 08:13
-
-
Save PeterAttardo/cc722b7649d0e62274b2 to your computer and use it in GitHub Desktop.
Android Shadow Drawing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
If you want to use Paint.setShadowLayer()
, you must disable hardware acceleration.
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
You are better off just use
Paint.setShadowLayer()