package com.novoda.bonfire.view; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.RectF; import android.graphics.drawable.Drawable; import com.novoda.bonfire.R; public class BubblyDrawable extends Drawable{ private final Paint paint; private final RectF rect; private final int bumpDiameter; private final int smallBubbleDiameter; private final int smallBubbleDistance; private final int bubbleCurveHeight; public BubblyDrawable(Resources resources) { this.bumpDiameter = resources.getDimensionPixelSize(R.dimen.bubble_bump_diameter); this.smallBubbleDiameter = resources.getDimensionPixelSize(R.dimen.small_bubble_diameter); this.smallBubbleDistance = resources.getDimensionPixelSize(R.dimen.small_bubble_distance); this.bubbleCurveHeight = resources.getDimensionPixelSize(R.dimen.big_bubble_curved_height); this.rect = new RectF(); this.paint = new Paint(); paint.setColor(resources.getColor(R.color.white)); paint.setStyle(Paint.Style.FILL); paint.setAntiAlias(true); } @Override public void draw(Canvas canvas) { int canvasHeight = canvas.getHeight(); int canvasWidth = canvas.getWidth(); drawBigBubble(canvas, canvasWidth, canvasHeight, bubbleCurveHeight); int horizontalCenter = canvasWidth / 2; int bumpCenter = canvasHeight - bubbleCurveHeight; drawBubble(canvas, horizontalCenter, bumpCenter, bumpDiameter); int smallBubbleCenter = bumpCenter + bumpDiameter + smallBubbleDistance; drawBubble(canvas, horizontalCenter, smallBubbleCenter, smallBubbleDiameter); } private void drawBigBubble(Canvas canvas, int canvasWidth, int canvasHeight, int bottomPadding) { int bottomPos = canvasHeight - bottomPadding * 2; canvas.drawRect(0, 0, canvasWidth, bottomPos, paint); rect.set(0, bottomPos - bottomPadding, canvasWidth, canvasHeight - bottomPadding); canvas.drawArc(rect, 0, 180, false, paint); } private void drawBubble(Canvas canvas, int xPosition, int yPosition, int diameter) { int radius = diameter / 2; rect.set(xPosition - radius, yPosition - radius, xPosition + radius, yPosition + radius); canvas.drawRoundRect(rect, radius, radius, paint); } @Override public void setAlpha(int alpha) { paint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter colorFilter) { paint.setColorFilter(colorFilter); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } }