I am trying to make buttons with different gradients programmatically. I use ShapeDrawable and it works like a charm.
RoundRectShape rs = new RoundRectShape(new float[] { 12f, 12f, 12f, 12f, 12f, 12f, 12f, 12f }, null, null);
ShapeDrawable sd = new ShapeDrawable(rs);
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, 0, height,
new int[] {
Color.parseColor("#feccb1"),
Color.parseColor("#f17432"),
Color.parseColor("#e86320"),
Color.parseColor("#f96e22") },
new float[] {
0, 0.50f, 0.50f, 1 },
Shader.TileMode.REPEAT);
return lg;
}
};
sd.setShaderFactory(sf);
myBtn.setBackgroundDrawable(sd);
However I would like to add a shadow to the button, not the button text programmatically. Any help would be appreciated.
Kotlin Android – TextView Shadow Effect To get shadow for TextView in Android, set android:elevation attribute, with required amount of elevation from the base level, for the TextView widget in layout XML file. For elevation to be effective, we should set background for the TextView.
To set the default (resting) elevation of a view, use the android:elevation attribute in the XML layout. To set the elevation of a view in the code of an activity, use the View. setElevation() method. To set the translation of a view, use the View.
However I would like to add a shadow to the button, not the button text programmatically.
I guess you want the shadow behind the current drawable you built. If yes then make a LayerDrawable
along with another Drawable
(placed first) that will act as the shadow:
RoundRectShape rss = new RoundRectShape(new float[] { 12f, 12f, 12f,
12f, 12f, 12f, 12f, 12f }, null, null);
ShapeDrawable sds = new ShapeDrawable(rss);
sds.setShaderFactory(new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, 0, height,
new int[] { Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5"),
Color.parseColor("#e5e5e5") }, new float[] { 0,
0.50f, 0.50f, 1 }, Shader.TileMode.REPEAT);
return lg;
}
});
LayerDrawable ld = new LayerDrawable(new Drawable[] { sds, sd });
ld.setLayerInset(0, 5, 5, 0, 0); // inset the shadow so it doesn't start right at the left/top
ld.setLayerInset(1, 0, 0, 5, 5); // inset the top drawable so we can leave a bit of space for the shadow to use
b.setBackgroundDrawable(ld);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With