package in.sahildave.gazetti.widget.fab; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.drawable.Drawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.Shape; import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; import android.util.AttributeSet; import in.sahildave.gazetti.R; public class PlusFloatingActionButton extends FloatingActionButton { int mPlusColor; public PlusFloatingActionButton(Context context) { this(context, null); } public PlusFloatingActionButton(Context context, AttributeSet attrs) { super(context, attrs); } public PlusFloatingActionButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override void init(Context context, AttributeSet attributeSet) { TypedArray attr = context.obtainStyledAttributes(attributeSet, R.styleable.PlusFloatingActionButton, 0, 0); mPlusColor = attr.getColor(R.styleable.PlusFloatingActionButton_fab_plusIconColor, getColor(android.R.color.white)); attr.recycle(); super.init(context, attributeSet); } /** * @return the current Color of plus icon. */ public int getPlusColor() { return mPlusColor; } public void setPlusColorResId(@ColorRes int plusColor) { setPlusColor(getColor(plusColor)); } public void setPlusColor(int color) { if (mPlusColor != color) { mPlusColor = color; updateBackground(); } } @Override public void setIcon(@DrawableRes int icon) { throw new UnsupportedOperationException("Use FloatingActionButton if you want to use custom icon"); } @Override Drawable getIconDrawable() { final float iconSize = getDimension(R.dimen.fab_icon_size); final float iconHalfSize = iconSize / 2f; final float plusSize = getDimension(R.dimen.fab_plus_icon_size); final float plusHalfStroke = getDimension(R.dimen.fab_plus_icon_stroke) / 2f; final float plusOffset = (iconSize - plusSize) / 2f; final Shape shape = new Shape() { @Override public void draw(Canvas canvas, Paint paint) { canvas.drawRect(plusOffset, iconHalfSize - plusHalfStroke, iconSize - plusOffset, iconHalfSize + plusHalfStroke, paint); canvas.drawRect(iconHalfSize - plusHalfStroke, plusOffset, iconHalfSize + plusHalfStroke, iconSize - plusOffset, paint); } }; ShapeDrawable drawable = new ShapeDrawable(shape); final Paint paint = drawable.getPaint(); paint.setColor(mPlusColor); paint.setStyle(Style.FILL); paint.setAntiAlias(true); return drawable; } }