Skip to content

Instantly share code, notes, and snippets.

@Qw4z1
Forked from creativepsyco/BaseButton.java
Last active August 29, 2015 14:14
Show Gist options
  • Save Qw4z1/3c8d873ef0a2b80c3627 to your computer and use it in GitHub Desktop.
Save Qw4z1/3c8d873ef0a2b80c3627 to your computer and use it in GitHub Desktop.
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.*;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.StateListDrawable;
import android.graphics.drawable.shapes.RectShape;
import android.util.AttributeSet;
import android.widget.Button;
/**
* User: msk
* Date: 13/01/2015
*/
public class BaseButton extends Button {
private final float defaultRadius = 0.0f;
private int defaultPrimaryColor;
public BaseButton(Context context) {
this(context, null);
}
public BaseButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BaseButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
defaultPrimaryColor = getResources().getColor(R.color.colorPrimary);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BaseButton);
int primaryColor = typedArray.getColor(R.styleable.BaseButton_normalStateColor, defaultPrimaryColor);
float radius = typedArray.getDimension(R.styleable.BaseButton_cornerRadius, defaultRadius);
int pressedStateColor = primaryColor & 0x00ffffff | 0xdf000000;
ShapeDrawable shapeSelected = new ShapeDrawable(new RectShape());
shapeSelected.getPaint().setColor(pressedStateColor);
shapeSelected.getPaint().setPathEffect(new CornerPathEffect(radius));
shapeSelected.getPaint().setAntiAlias(true);
shapeSelected.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
shapeSelected.getPaint().setStrokeWidth(1);
ShapeDrawable darkenSelected = new ShapeDrawable(new RectShape());
darkenSelected.getPaint().setColor(Color.BLACK);
darkenSelected.getPaint().setPathEffect(new CornerPathEffect(radius));
darkenSelected.getPaint().setAntiAlias(true);
darkenSelected.getPaint().setXfermode(new PorterDuffXfermode(PorterDuff.Mode.OVERLAY));
darkenSelected.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
darkenSelected.getPaint().setStrokeWidth(1);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{darkenSelected, shapeSelected});
ShapeDrawable shapeNormal = new ShapeDrawable(new RectShape());
shapeNormal.getPaint().setAntiAlias(true);
shapeNormal.getPaint().setColor(primaryColor);
shapeNormal.getPaint().setPathEffect(new CornerPathEffect(radius));
shapeNormal.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
shapeNormal.getPaint().setStrokeWidth(1);
StateListDrawable states = new StateListDrawable();
Resources res = getResources();
states.addState(new int[]{android.R.attr.state_pressed}, layerDrawable);
states.addState(new int[]{android.R.attr.state_focused}, layerDrawable);
states.addState(new int[]{}, shapeNormal);
setBackground(states);
typedArray.recycle();
}
}
<com.youapp.BaseButton
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="24dp"
app:cornerRadius="2dp"
app:normalStateColor="@color/colorPrimary"/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment