@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction()==MotionEvent.ACTION_DOWN){
View view = getCurrentFocus();
if(view!=iv1){
iv1.setVisibility(View.INVISIBLE);
}
}
return super.dispatchTouchEvent(ev);
}
当点击图片以外的地方图片会自动隐藏;实现对图片以外的地方的监听!!!!!
注意:当返回值为TRUE时,直接中断了事件向下传递的过程,无论点击屏幕哪儿,都会执行方法里的类容!!!!
实测上面的方法不管用,getCurrentFocus();返回的空间都是空的,下面进行第二种方式:
@Override
public boolean onTouchEvent(MotionEvent event) {
View view = getCurrentFocus();
Log.i("tAG==================",(view==null)+"");
iv1.setVisibility(View.INVISIBLE);
return true;
}
activity中所有的控件只要没有设置clickable属性的都不会调用onTouchEvent()方法,然后事件被一层层返回,最后当然事件被系统消费了,一样会走onTouchEvent()。
那么,设置了clickable属性的会怎么样呢,我们知道button类的控件天生就是大娘生的,自带clickable属性。当activity中有这些控件时,点击它们时onTouchEvent()方法不会被调用,当然他就会走onclick或onLongClick的监听事件了。这样我们想要的效果就有了!
当点击屏幕的空白区域时,重写onTouchEvent(),返回true,强制消费!当点击某个控件时,设置clickable属性,再来个监听事件,OK!
http://blog.csdn.net/jiangwei0910410003/article/details/17504315
很疑惑的一点:
view的onClick方法是在ACTION_UP之后执行,记住一点就可以了那就是如果onTouch方法返回true,说明View这次消费了这次事件,所以就不会再执行后续的onClick方法了,