不用设置selector也能更改View的显示状态

今天加点小东西,可能比较适用。

一般情况下view在click或者pressed的时候希望view能跟正常情况(没有pressed或者click)区分,这样我们就在drawable里面添加selector,分别设置view未pressed和pressed时的drawable.如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/sel"/>
    <item android:state_pressed="false" android:drawable="@drawable/unsel"/>
</selector>
我想很多都这样做。以前我们项目当中完全没有涉及到按下view的一个状态,这样造成的后果就是:当你你点击一个view时,在反应慢的手机上或者在加载一个比较耗时的操作时他可能要过段时间(几秒钟)才跳转或者出现你点击之后的效果。那么在响应的这段时间你是纠结的!因为你不知道你到底点击了这个view(按钮)没?毕竟在UI(手机显示)上是没有给你任何提示的。这样我们设置一个selector是很有必要的。但是一个view(按钮)设置selector你可能会比较简单。但是一个项目几十上百(更多)的view(按钮)你都要设置这样是很烦的。该怎么解决全部的类?看下面......这个是我在早几年前那个时候我刚做android没有多久我老大写的一个方法。。那个时候不知道为什么,也没有问(不好意思问,现在想想也是醉了。。哈哈。。)代码我已经记不得了,直接的效果。我试着实现的。。。

       /**
	 * 单击事件
	 * @notice 重写过OnTouchListener方法的View请不要调用此方法
	 * @param view
	 * @param listener
	 */
	public static void onClickListener(View view, final View.OnClickListener listener) {
		if (view == null) {
			return;
		}
		view.setOnTouchListener(new View.OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				int action = event.getAction();
				switch (action) {
					case MotionEvent.ACTION_DOWN:
						v.setAlpha(0.5f);
						break;
					case MotionEvent.ACTION_MOVE:
						break;
					case MotionEvent.ACTION_UP:
					case MotionEvent.ACTION_CANCEL:
						if (event.getX() <= v.getRight() - v.getLeft() && event.getX() >= 0 &&
								event.getY() <= v.getBottom() - v.getTop() && event.getY() >= 0 &&
								listener != null) {
							listener.onClick(v);
						}
						v.setAlpha(1.0f);
				}
				return true;
			}
		});
	}
这方法就是设置view的OnTouchListener方法判断按下和抬起的手势分别设置他的一个Alpha值达到效果。
这个方法一般的点击事件是可以用的,但是设置过OnTouchListener方法的view就不能使用。

这个方法虽然简单,但个人觉得还实用。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值