简单的TextView自定义控件,实现左右加减按钮

之前看到了一个自定义EditView(http://blog.csdn.net/xiaanming/article/details/11066685),发现可以用drawableLeft、drawableRight来虚拟点击事件,就想顺着这个思路自己写一个EditView实现左右加减按钮改变editview中数值,基本实现了,但是在Listview中使用问题多多,那么久退而求其次做了一个TextView。

界面图如下:


下面贴代码:布局

<com.example.smartedittext.AddAndSubText
       android:id="@+id/samrtText"
       android:layout_width="100dp"
       android:layout_height="wrap_content"
       android:layout_below="@+id/button"
       android:layout_centerHorizontal="true"
       android:layout_marginTop="30dp"
       android:background="@drawable/login_edittext_bg"
       android:drawableLeft="@drawable/public_plus"
       android:drawableRight="@drawable/public_minus"
       android:gravity="center" />

AddAndSunText:

public class AddAndSubText  extends TextView{

	Drawable mADD,mSUB,mSUB_UNABLE;
	
	public AddAndSubText(Context context) {
		super(context);
	}
	
	public AddAndSubText(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();//初始化
	}

	/**
	 * 初始化,设置初始值
	 */
	private void init()
	{
//		本来想要在这里设置加减号图片,可是似乎这样做不行,知道的请告诉我吧
//		mADD = getResources().getDrawable(R.drawable.public_plus);
//		mSUB = getResources().getDrawable(R.drawable.public_minus);
		mADD = getCompoundDrawables()[0];
		mSUB = getCompoundDrawables()[2];
		mSUB_UNABLE = getResources().getDrawable(R.drawable.public_minus_pressed);
		this.setText(0 + "");//设置初始值为0
	}

	/**
	 * 获取点击时X值,判断其所在位置来虚拟点击事件
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		
		int num;
		float X,add_left,add_right,sub_left,sub_right;
		X = event.getX();
		add_right = getTotalPaddingLeft();
		add_left = getPaddingLeft();
		sub_right = getWidth() - getPaddingRight();
		sub_left = getWidth() - getTotalPaddingRight();
		if(TextUtils.isEmpty(this.getText().toString()))
		{
			num = 1;
		}else{
			num = Integer.parseInt(getText().toString());
		}
		if(X > add_left && X < add_right)
		{
			num++;
			num = setCheckadle(num);//检验当前输入框数字,若为0则设置减号按钮不可见
			this.setText(num + "");
			
		}else if(X >sub_left && X <sub_right)
		{
			num--;
			num = setCheckadle(num);//检验当前输入框数字,若不为0则设置减号按钮可见
			this.setText(num + "");

		}
		return super.onTouchEvent(event);
	}

	/**
	 * 判断num值,对加减号进行设置:若num = 0,减号不可用;若num = 99,加号不可用(限制num在0~99区间)
	 * @param num 
	 * @return 
	 */
	private int setCheckadle(int num) {
		if(num == 0)
		{
			setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], mSUB_UNABLE, getCompoundDrawables()[3]);
		}else{
			setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], mSUB, getCompoundDrawables()[3]);
		}
		if(num == 99)
		{
			setCompoundDrawables(null, getCompoundDrawables()[1], getCompoundDrawables()[2], getCompoundDrawables()[3]);
		}else{
			setCompoundDrawables(mADD, getCompoundDrawables()[1], getCompoundDrawables()[2], getCompoundDrawables()[3]);
		}
		return num;
	}

	
}

使用的话就和普通textView一样用就好了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值