1.编写主类
package com.sample.button;import android.content.Context;import android.content.res.TypedArray;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.util.Log;import android.widget.CompoundButton;import com.example.buttonsample.R;public class MyButton extends CompoundButton { public MyButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } private Drawable imgOFF; private Drawable imgON; public MyButton(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyButton, 0, 0); try { imgOFF = a.getDrawable(R.styleable.MyButton_imgOFF); imgON = a.getDrawable(R.styleable.MyButton_imgON); } catch (Exception e) { e.printStackTrace(); } a.recycle(); } public MyButton(Context context) { super(context); } @Override public void setChecked(boolean checked) { super.setChecked(checked); udpateDrawable(); } private void udpateDrawable() { if (this.isChecked()) { Log.e(MyButton.class.getName(),"changing to imgON"); this.setBackgroundDrawable(imgON); } else { Log.e(MyButton.class.getName(),"changing to imgOFF"); this.setBackgroundDrawable(imgOFF); } } @Override protected void onFinishInflate() { udpateDrawable(); super.onFinishInflate(); }}
2.编写attrs定义文件(res/values/attrs.xml)
3.涉及到的2个图片资源如下
res/drawable/off.png
res/drawable/on.png
4.测试用activity的layout文件
5.实际效果即:
点击按钮时,按钮会在以下2个图片之间切换.