写了一个开关按钮继承ImageButton,开关状态发生改变时切换图片资源(非滑动效果)。可以 需要滑动效果的可以看 xiaanming android自定义滑动开关控件,适合所有的android系统;共享给大家 方便大家直接加到工程中;
运行截图:
代码很简单,也不需要我讲解什么了,直接上源码:
/**
* 具有开关效果的ImageButton
* @param IsTurnOn Boolean 当前状态 true是开,false 是关;
* @param offSrc ResourceId 状态为关的 图片资源ID
* @param onSrc ResourceId 状态为开的 图片资源ID
* @param switchListeneer 开关按钮点击监听器
* @Email lx0017@163.com
* @date 2014-11-27
* @author leo
*
*/
public class SwitchButton extends ImageButton {
private boolean isTurnOn=false; //当前状态 true是开,false 是关;
private int turnOnResource = 0; //状态为开的 图片资源ID
private int turnOffResource = 0; //状态为关的 图片资源ID
private OnSwitchListener onSwitchListener; //开关按钮点击监听器
public SwitchButton(Context context) {
this(context,null);
}
public SwitchButton(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public SwitchButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
//获取属性
TypedArray typedArray = context.obtainStyledAttributes(attrs,
com.leo.switchbutton.R.styleable.SwitchButton, defStyle, 0);
int n = typedArray.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = typedArray.getIndex(i);
switch (attr) {
case R.styleable.SwitchButton_IsTurnOn:
isTurnOn = typedArray.getBoolean(attr, false);
break;
case R.styleable.SwitchButton_offSrc:
turnOffResource = typedArray.getResourceId(attr, 0);
break;
case R.styleable.SwitchButton_onSrc:
turnOnResource = typedArray.getResourceId(attr, 0);
break;
}
}
init();
}
private void init() {
changeRes(isTurnOn);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
isTurnOn = !isTurnOn;
changeRes(isTurnOn);
if(null!=onSwitchListener)
onSwitchListener.onSwitch(v, isTurnOn);
}
});
}
/**
* 更具状态 更换图片资源
* @param isTurnOn
*/
private void changeRes(boolean isTurnOn) {
if (isTurnOn) {
setImageResource(turnOnResource);
} else {
setImageResource(turnOffResource);
}
}
public interface OnSwitchListener {
void onSwitch(View v, boolean isTurnOn);
}
public void setTurnOn(boolean isTurnOn) {
this.isTurnOn = isTurnOn;
changeRes(isTurnOn);
}
public void setTurnOnResource(int turnOnResource) {
this.turnOnResource = turnOnResource;
changeRes(isTurnOn);
}
public void setTurnOffResource(int turnOffResource) {
this.turnOffResource = turnOffResource;
changeRes(isTurnOn);
}
public void setOnSwitchListener(OnSwitchListener onSwitchListener) {
this.onSwitchListener = onSwitchListener;
}
}