package org.droidplanner.android.view.button;
import org.droidplanner.android.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.RadioButton;
/**
* This class implements a radio button with custom gravity. The api's version
* is always left-aligned
* (https://stackoverflow.com/questions/4407553/android-radiobutton
* -button-drawable -gravity/4407803#4407803).
*/
public class RadioButtonCenter extends RadioButton {
/**
* This is the radio button drawable.
*/
private Drawable mButtonDrawable;
public RadioButtonCenter(Context context) {
super(context);
}
public RadioButtonCenter(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public RadioButtonCenter(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
final TypedArray attributes = context.obtainStyledAttributes(attrs,
R.styleable.RadioButtonCenter, defStyle, 0);
try {
mButtonDrawable = attributes.getDrawable(R.styleable.RadioButtonCenter_android_button);
} finally {
attributes.recycle();
}
setButtonDrawable(android.R.color.transparent);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mButtonDrawable != null) {
mButtonDrawable.setState(getDrawableState());
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
final int height = mButtonDrawable.getIntrinsicHeight();
int y = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
y = getHeight() - height;
break;
case Gravity.CENTER_VERTICAL:
y = (getHeight() - height) / 2;
break;
}
int buttonWidth = mButtonDrawable.getIntrinsicWidth();
int buttonLeft = (getWidth() - buttonWidth) / 2;
mButtonDrawable.setBounds(buttonLeft, y, buttonLeft + buttonWidth, y + height);
mButtonDrawable.draw(canvas);
}
}
}