View的onTouchEvent()里,有
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
...
performClick();
...
...
这段代码。按照我自己的理解,performClick();这一句就调用了onClick()。但是我自己定义一个MyView继承View并实现了OnClickListener。重写了onTouchEvent()和onClick(),代码如下(其他代码省略):
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.e("view", event.getAction() + "-start");
boolean result = super.onTouchEvent(event);
Log.e("view", event.getAction() + "-end");
return result;
}
@Override
public void onClick(View v) {
Log.e("view", "click");
}
按我上面的理解,日志输出应该是
0-start
0-end
1-start
click
1-end
但是实际输出为
0-start
0-end
1-start
1-end
click
请问是我哪里的理解出错了吗?
首先,我不知道你这是啥意思,还有。
onclick事件是在UP之后才会响应,而ontouch是在DOWN的时候已经开始响应了,何况还有MOVE以及CANCEL,你说是哪些代码先执行?还有。
一般设置了ontouch事件之后就不会再去实现onclick接口了,因为ontouch可以模拟出各种操作,并且实现编程人员重写ontouch之后,都会让返回值变为true,这样才可以截获touch事件,你让它返回默认的false,,,
如果只是对view很简单的单击双击长按等操作,那使用已经封装好了的setlistenner就行;如果需要滑动点击超时拖拽等,再实现ontouch。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。