1、自定义控件:RadioButtonCenter
/**
* Drawable可以居中的RadionButton
* @author Samurai
*
*/
public class RadioButtonCenter extends RadioButton {
/**
* Drawable可以居中的RadionButton
* @param context
* @param attrs
*/
public RadioButtonCenter(Context context, AttributeSet attrs) {
super(context, attrs);
// 绑定参数数组
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CompoundButton, 0, 0);
// 获取到xml布局中定义好的Drawable对象
buttonDrawable = a.getDrawable(1);
// 将原始的Drawable替换成透明
setButtonDrawable(getResources().getDrawable(android.R.color.transparent));
}
/**
* 准备绘制在居中位置的Drawable
*/
private Drawable buttonDrawable;
/**
* 绘制RadioButtonCenter
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (buttonDrawable != null) {
// 根据选中状态选择不同的drawable
buttonDrawable.setState(getDrawableState());
// 居中方式
final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
// Drawable宽度
final int drawableWidth = buttonDrawable.getIntrinsicWidth();
// Drawable高度
final int drawableHeight = buttonDrawable.getIntrinsicHeight();
// 顶部位置
int top = 0;
switch (verticalGravity) {
case Gravity.BOTTOM:
top = getHeight() - drawableHeight;
break;
case Gravity.CENTER_VERTICAL:
top = (getHeight() - drawableHeight) / 2;
break;
}
// 底部位置
int bottom = top + drawableHeight;
// 左边位置(与父类不同)
int left = (getWidth() - drawableWidth) / 2;
// 右边位置(与父类不同)
int right = left + drawableWidth;
// 绘制边界
buttonDrawable.setBounds(left, top, right, bottom);
// 绘制控件
buttonDrawable.draw(canvas);
}
}
}
2、attrs.xml文件中加入如下的标签属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CompoundButton">
<attr name="android:button" />
</declare-styleable>
</resources>
3、使用RadioButtonCenter:
<?xml version="1.0" encoding="utf-8"?>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rg_tab"
style="@style/layout_match"
android:checkedButton="@+id/main_tab_0"
android:orientation="horizontal"
android:background="@drawable/tabs_bg">
<com.suning.base.RadioButtonCenter
android:id="@id/main_tab_0"
style="@style/layout_horizontal"
android:button="@drawable/tab_time"/>
<com.suning.base.RadioButtonCenter
android:id="@+id/main_tab_1"
style="@style/layout_horizontal"
android:button="@null"/>
<com.suning.base.RadioButtonCenter
android:id="@+id/main_tab_2"
style="@style/layout_horizontal"
android:button="@null"/>
<com.suning.base.RadioButtonCenter
android:id="@+id/main_tab_3"
style="@style/layout_horizontal"
android:button="@null"/>
<com.suning.base.RadioButtonCenter
android:id="@+id/main_tab_4"
style="@style/layout_horizontal"
android:button="@null"/>
</RadioGroup>
4、Java代码中,RadionButtonCenter控件的使用方式与RadioButton完全一致。
5、效果图: