Android SwitchButton 开关按钮

写了一个开关按钮继承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;
	}

}

 

 


源码下载 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值