开发者社区> 问答> 正文

Android View onTouchEvent与onClick的调用问题。

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

请问是我哪里的理解出错了吗?

展开
收起
爵霸 2016-05-27 09:18:16 1863 0
1 条回答
写回答
取消 提交回答
  • 首先,我不知道你这是啥意思,还有。
    onclick事件是在UP之后才会响应,而ontouch是在DOWN的时候已经开始响应了,何况还有MOVE以及CANCEL,你说是哪些代码先执行?还有。
    一般设置了ontouch事件之后就不会再去实现onclick接口了,因为ontouch可以模拟出各种操作,并且实现编程人员重写ontouch之后,都会让返回值变为true,这样才可以截获touch事件,你让它返回默认的false,,,
    如果只是对view很简单的单击双击长按等操作,那使用已经封装好了的setlistenner就行;如果需要滑动点击超时拖拽等,再实现ontouch。

    2019-07-17 19:17:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载