package com.marshalchen.common.uimodule.showcaseview; import android.content.res.Resources; import android.graphics.*; import android.graphics.drawable.Drawable; import com.marshalchen.common.uimodule.R; /** * Created by curraa01 on 13/10/2013. */ class StandardShowcaseDrawer implements ShowcaseDrawer { protected final Paint eraserPaint; protected final Drawable showcaseDrawable; private final Paint basicPaint; private final float showcaseRadius; protected int backgroundColour; public StandardShowcaseDrawer(Resources resources) { PorterDuffXfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY); eraserPaint = new Paint(); eraserPaint.setColor(0xFFFFFF); eraserPaint.setAlpha(0); eraserPaint.setXfermode(xfermode); eraserPaint.setAntiAlias(true); basicPaint = new Paint(); showcaseRadius = resources.getDimension(R.dimen.showcase_radius); showcaseDrawable = resources.getDrawable(R.drawable.show_case_cling_bleached); } @Override public void setShowcaseColour(int color) { showcaseDrawable.setColorFilter(color, PorterDuff.Mode.MULTIPLY); } @Override public void drawShowcase(Bitmap buffer, float x, float y, float scaleMultiplier) { Canvas bufferCanvas = new Canvas(buffer); bufferCanvas.drawCircle(x, y, showcaseRadius, eraserPaint); int halfW = getShowcaseWidth() / 2; int halfH = getShowcaseHeight() / 2; int left = (int) (x - halfW); int top = (int) (y - halfH); showcaseDrawable.setBounds(left, top, left + getShowcaseWidth(), top + getShowcaseHeight()); showcaseDrawable.draw(bufferCanvas); } @Override public int getShowcaseWidth() { return showcaseDrawable.getIntrinsicWidth(); } @Override public int getShowcaseHeight() { return showcaseDrawable.getIntrinsicHeight(); } @Override public float getBlockedRadius() { return showcaseRadius; } @Override public void setBackgroundColour(int backgroundColor) { this.backgroundColour = backgroundColor; } @Override public void erase(Bitmap bitmapBuffer) { bitmapBuffer.eraseColor(backgroundColour); } @Override public void drawToCanvas(Canvas canvas, Bitmap bitmapBuffer) { canvas.drawBitmap(bitmapBuffer, 0, 0, basicPaint); } }