自定义view实现开关按钮并监听(有滑动效果)

本文介绍如何使用两张图片实现自定义开关按钮,通过监听点击事件并调整图片位置来模拟滑动效果。文章详细解释了实现原理及难点,并提供了一个用于监听开关状态变化的自定义接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义view实现开关按钮并监听(有滑动效果)

原理:其实是首先得有两张图片,一张是背景图,左开右关,第二张其实说白了就是挡住某一边的图,所以这张图的宽度就只有第一张的一半,这样就可以让用户辨别按钮是开还是关。然后监听view的点击事件,从而调用invalidate()方法来重绘来产生滑动效果。
难点:得从点击事件获取滑动的坐标然后调整第二张图片离左边的距离。
@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		maxLeft = toggleBackground.getWidth() - toggleSolide.getWidth();
		canvas.drawBitmap(toggleBackground, 0, 0, paint);
		switch (state) {
		case STATE_DOWN:
		case STATE_MOVE:
			if (currentX > toggleSolide.getWidth() / 2f) {
				// 让滑块向右移动(重新绘制滑块的位置)
				left = currentX - toggleSolide.getWidth() / 2f;
				if (left > maxLeft)
					left = maxLeft;
				canvas.drawBitmap(toggleSolide, left, 0, paint);
			} else if (currentX <= toggleSolide.getWidth() / 2f) {
				// 让滑块不动就可以
				canvas.drawBitmap(toggleSolide, 0, 0, paint);
			}
			break;
		case STATE_NONE:
			if (toggleBackground != null) {
				canvas.drawBitmap(toggleBackground, 0, 0, paint);
			}
			if (toggleSolide != null) {
				canvas.drawBitmap(toggleSolide, 0, 0, paint);
			}
			break;
		case STATE_UP:
			if (isOpen) {
				canvas.drawBitmap(toggleSolide, maxLeft, 0, paint);
			} else {
				canvas.drawBitmap(toggleSolide, 0, 0, paint);
			}
			if(onUpActionListenter!=null){
				onUpActionListenter.OnUp(isOpen);
			}
			break;
		default:
			canvas.drawBitmap(toggleSolide, 0, 0, paint);
			break;
		}
	}


开关的监听:通过自定义接口来实现对开关的监听,并在点击事件调用接口方法
private OnUpActionListenter onUpActionListenter;

public interface OnUpActionListenter{
	public void OnUp(boolean isOpen);
}
public void setOnUpActionListenter(OnUpActionListenter listenter){
	this.onUpActionListenter = listenter;
}



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值