There is another way for generating shadows. Using only paint shadow layer.
Check code below, and if you don't have any objections i can add pull request in next week.
class ShadowView extends View {
private Paint paint = new Paint();
private RectF rect = new RectF(50, 50, 150, 150);
private float lerp(float a, float b, float t) {
return a * (1.f - t) + b * (t);
}
private ShadowView(Context context) {
super(context);
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
long tms = new Date().getTime();
float t = Math.abs((tms % 8000) - 4000) / 4000.f;
float t2 = Math.abs((tms % 2000) - 1000) / 1000.f;
float corner = lerp(0, 100, t2);
paint.setShadowLayer(lerp(3, 38, t), 0, lerp(1, 19, t), ((int) (lerp(0.12f, 0.30f, t) * 0xFF)) << 24);
canvas.drawRoundRect(rect, corner, corner, paint);
paint.setShadowLayer(lerp(2, 12, t), 0, lerp(1, 15, t), ((int) (lerp(0.24f, 0.22f, t) * 0xFF)) << 24);
canvas.drawRoundRect(rect, corner, corner, paint);
paint.setColor(0xFFFFFFFF);
canvas.drawRoundRect(rect, corner, corner, paint);
ViewCompat.postInvalidateOnAnimation(this);
}
}
// ((FrameLayout) findViewById(R.id.container)).addView(new ShadowView(this), new ViewGroup.LayoutParams(200, 200));
PS. warsztatowicz.. :)