package com.aries.ui.view.radius.delegate; import android.content.Context; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.util.AttributeSet; import android.util.Log; import android.widget.CompoundButton; import com.aries.ui.util.DrawableUtil; import com.aries.ui.widget.R; /** * @Author: AriesHoo on 2018/7/19 9:57 * @E-Mail: [email protected] * Function: 设置CompoundButton ButtonDrawable相关代理 * Description: * 1、新增控制是否Button为系统自带属性 */ public class RadiusCompoundDelegate<T extends RadiusCompoundDelegate> extends RadiusTextDelegate<T> { private CompoundButton mButton; private StateListDrawable mStateButtonDrawable; private boolean mButtonDrawableSystemEnable; private float mButtonDrawableColorRadius; private boolean mButtonDrawableColorCircleEnable; private int mButtonDrawableWidth; private int mButtonDrawableHeight; private Drawable mButtonDrawable; private Drawable mButtonPressedDrawable; private Drawable mButtonDisabledDrawable; private Drawable mButtonSelectedDrawable; private Drawable mButtonCheckedDrawable; public RadiusCompoundDelegate(CompoundButton view, Context context, AttributeSet attrs) { super(view, context, attrs); } @Override protected void initAttributes(Context context, AttributeSet attrs) { mButtonDrawableSystemEnable = mTypedArray.getBoolean(R.styleable.RadiusSwitch_rv_buttonDrawableSystemEnable, false); mButtonDrawableColorRadius = mTypedArray.getDimension(R.styleable.RadiusSwitch_rv_buttonDrawableColorRadius, 0); mButtonDrawableColorCircleEnable = mTypedArray.getBoolean(R.styleable.RadiusSwitch_rv_buttonDrawableColorCircleEnable, false); mButtonDrawableWidth = mTypedArray.getDimensionPixelSize(R.styleable.RadiusSwitch_rv_buttonDrawableWidth, -1); mButtonDrawableHeight = mTypedArray.getDimensionPixelSize(R.styleable.RadiusSwitch_rv_buttonDrawableHeight, -1); mButtonDrawable = mTypedArray.getDrawable(R.styleable.RadiusSwitch_rv_buttonDrawable); mButtonPressedDrawable = mTypedArray.getDrawable(R.styleable.RadiusSwitch_rv_buttonPressedDrawable); mButtonDisabledDrawable = mTypedArray.getDrawable(R.styleable.RadiusSwitch_rv_buttonDisabledDrawable); mButtonSelectedDrawable = mTypedArray.getDrawable(R.styleable.RadiusSwitch_rv_buttonSelectedDrawable); mButtonCheckedDrawable = mTypedArray.getDrawable(R.styleable.RadiusSwitch_rv_buttonCheckedDrawable); // mButtonPressedDrawable = mButtonPressedDrawable == null ? mButtonDrawable : mButtonPressedDrawable; // mButtonDisabledDrawable = mButtonDisabledDrawable == null ? mButtonDrawable : mButtonDisabledDrawable; // mButtonSelectedDrawable = mButtonSelectedDrawable == null ? mButtonDrawable : mButtonSelectedDrawable; // mButtonCheckedDrawable = mButtonCheckedDrawable == null ? mButtonDrawable : mButtonCheckedDrawable; super.initAttributes(context, attrs); } @Override public void init() { super.init(); setButtonDrawable(); } /** * 是否系统自带ButtonDrawable * * @param buttonDrawableSystemEnable * @return */ public T setButtonDrawableSystemEnable(boolean buttonDrawableSystemEnable) { mButtonDrawableSystemEnable = buttonDrawableSystemEnable; return back(); } /** * colorDrawable 圆角 * * @param buttonDrawableColorRadius * @return */ public T setButtonDrawableColorRadius(float buttonDrawableColorRadius) { mButtonDrawableColorRadius = buttonDrawableColorRadius; return back(); } /** * 是否ColorDrawable 为圆形 * * @param buttonDrawableColorCircleEnable * @return */ public T setButtonDrawableColorCircleEnable(boolean buttonDrawableColorCircleEnable) { mButtonDrawableColorCircleEnable = buttonDrawableColorCircleEnable; return back(); } /** * 设置drawable宽度--ColorDrawable有效其它不知为啥失效 * * @param drawableWidth * @return */ public T setButtonDrawableWidth(int drawableWidth) { mButtonDrawableWidth = drawableWidth; return (T) this; } /** * 设置drawable高度--ColorDrawable有效其它不知为啥失效 * * @param drawableHeight * @return */ public T setButtonDrawableHeight(int drawableHeight) { mButtonDrawableHeight = drawableHeight; return (T) this; } /** * 设置默认状态Drawable * * @param drawable */ public T setButtonDrawable(Drawable drawable) { mButtonDrawable = drawable; return (T) this; } public T setButtonDrawable(int resId) { return setButtonDrawable(getDrawable(resId)); } /** * 设置按下效果Drawable * * @param drawable */ public T setButtonPressedDrawable(Drawable drawable) { mButtonPressedDrawable = drawable; return (T) this; } public T setButtonPressedDrawable(int resId) { return setButtonPressedDrawable(getDrawable(resId)); } /** * 设置不可操作效果Drawable * * @param drawable */ public T setButtonDisabledDrawable(Drawable drawable) { mButtonDisabledDrawable = drawable; return (T) this; } public T setButtonDisabledDrawable(int resId) { return setButtonDisabledDrawable(getDrawable(resId)); } /** * 设置选中效果Drawable * * @param drawable * @return */ public T setButtonSelectedDrawable(Drawable drawable) { mButtonSelectedDrawable = drawable; return (T) this; } public T setButtonSelectedDrawable(int resId) { return setButtonSelectedDrawable(getDrawable(resId)); } /** * 设置Checked状态Drawable * * @param drawable * @return */ public T setButtonCheckedDrawable(Drawable drawable) { mButtonCheckedDrawable = drawable; return (T) this; } public T setButtonCheckedDrawable(int resId) { return setButtonCheckedDrawable(getDrawable(resId)); } /** * 设置CompoundButton的setButtonDrawable属性 */ private void setButtonDrawable() { mButton = (CompoundButton) mView; if (mButtonDrawableSystemEnable) { return; } Log.i("setButtonDrawable", "id:" + mButton.getId() + ";mButtonDrawable:" + mButtonDrawable); if (mButtonDrawable == null && mButtonPressedDrawable == null && mButtonDisabledDrawable == null && mButtonSelectedDrawable == null && mButtonCheckedDrawable == null) { mButton.setButtonDrawable(null); return; } float radius = mButtonDrawableColorCircleEnable ? mButtonDrawableWidth + mButtonDrawableHeight / 2 : mButtonDrawableColorRadius; mStateButtonDrawable = new StateListDrawable(); mStateButtonDrawable.addState(new int[]{mStateChecked}, getStateDrawable(mButtonCheckedDrawable, radius, mButtonDrawableWidth, mButtonDrawableHeight)); mStateButtonDrawable.addState(new int[]{mStateSelected}, getStateDrawable(mButtonSelectedDrawable, radius, mButtonDrawableWidth, mButtonDrawableHeight)); mStateButtonDrawable.addState(new int[]{mStatePressed}, getStateDrawable(mButtonPressedDrawable, radius, mButtonDrawableWidth, mButtonDrawableHeight)); mStateButtonDrawable.addState(new int[]{mStateDisabled}, getStateDrawable(mButtonDisabledDrawable, radius, mButtonDrawableWidth, mButtonDrawableHeight)); mStateButtonDrawable.addState(new int[]{}, getStateDrawable(mButtonDrawable, radius, mButtonDrawableWidth, mButtonDrawableHeight)); DrawableUtil.setDrawableWidthHeight(mStateButtonDrawable, mButtonDrawableWidth, mButtonDrawableHeight); mButton.setButtonDrawable(mStateButtonDrawable); } }