您的位置:首页 > 其它

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

2016-08-08 14:59 337 查看
今天加点小东西,可能比较适用。

一般情况下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就不能使用。

这个方法虽然简单,但个人觉得还实用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐