自定义控件属性补充、9patch图

本文介绍如何使用TypedArray简化自定义控件属性获取过程,并通过示例代码展示了如何为自定义切换按钮设置背景和滑动图片资源。

自定义控件属性和自定义控件类关联时,在两个参数的构造方法中,除了通过attrs.getAttributeValue(命名空间,属性名);方法获得属性的实例外,还可以用

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.myToggleBtn);方法。

具体操作如下:

public myToggleButton(Context context, AttributeSet attrs) {
	super(context, attrs);

	TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.myToggleBtn);
	int count = ta.getIndexCount();
	for (int i = 0; i < count; i++) {
		// 获得某个属性的id值
		int itemId = ta.getIndex(i);
		switch (itemId) {
		case R.styleable.myToggleBtn_myBackground:
			backId = ta.getResourceId(itemId, -1);
			if(backId == -1){
				throw new RuntimeException("请设置背景图片");
			}
			back = BitmapFactory.decodeResource(getResources(), backId);
			break;
		case R.styleable.myToggleBtn_mySlideBtn:
			slideId = ta.getResourceId(itemId, -1);
			if(slideId == -1){
				throw new RuntimeException("请设置滑动图片");
			}
			slide = BitmapFactory.decodeResource(getResources(), slideId);
			break;
		case R.styleable.myToggleBtn_currentState:
			currStat = ta.getBoolean(itemId, false);
			if (currStat) {
				// 当前状态为开,则令左边起始位置为0
				slide_left = back.getWidth() - slide.getWidth();
			} else {
				// 当前状态为关,则令左边起始位置为差
				slide_left = 0;
			}
			// 初始化时,刷新当前状态
			invalidate();
			break;
		}
	}
	initView();
}

该方法在获得属性实例时,不用每次都写命名空间,方便了一些。

在上面代码中自定义开关的图片资源在获得属性实例时就赋值了,所以,在initView()方法中就不用再赋值了。

9patch图

左边和上边代表可以拉伸的区域。

右边和下边代表可以放置其他控件的区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值