The trick is to create an additional Canvas
to draw a shadow Bitmap
and then cache it:
private Context mContext;
private Bitmap valueBackgroundBitmap = null;
private Bitmap generateBallBitmap() {
final int shadowSize = (int) ViewUtilKt.convertDpToPx(mContext, 8);
final int width = (int) ViewUtilKt.convertDpToPx(mContext, 80);
final int height = (int) ViewUtilKt.convertDpToPx(mContext, 30);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
paint.setShadowLayer(shadowSize, 0, shadowSize, ContextCompat.getColor(mContext, R.color.shadow));
Bitmap bitmap = Bitmap.createBitmap(width + 50, height + 50, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(Color.TRANSPARENT);
Canvas canvas = new Canvas(bitmap);
canvas.drawRect(0, 0, width, height, paint);
return bitmap;
}
and then use in the onDraw()
or whichever one you want to draw:
@Override
public void drawValue(Canvas c, String valueText, float x, float y, int color) {
if (null == this.valueBackgroundBitmap) {
this.valueBackgroundBitmap = generateBallBitmap();
}
c.drawBitmap(valueBackgroundBitmap, x, y, null);
}