针对屏幕上的一个View组件,Android是如何区分应当触发onTouch事件还是onClick事件?在Android中,一次用户操作可以被不同的View组件按次序分别处理,并将完全响应了用户的一次UI操作称之为消耗了该事件(consume),那么Android是按什么次序将事件传递的,又在什么情况下判定为消耗了该事件?下面通过一段具体的代码进行说明。

在这段代码中,先为按钮添加单击事件监听器,并通过Log.i()方法输出onClick(单击事件)。然后为按钮添加触摸事件,通过判断方式输出当前手指是按下还是抬起。具体代码如下:

01 Button button = (Button) findViewById(R.id.btn);  //获得按钮对象02 //为按钮添加单击事件监听器03 button.setOnClickListener(new View.OnClickListener() {04 @Override05 public void onClick(View v) {06         Log.i("onClick", "单击事件");07     }08 });09 //为按钮添加触摸事件监听器10 button.setOnTouchListener(new View.OnTouchListener() {11 @Override12 public boolean onTouch(View v, MotionEvent event) {13 if (event.getAction() == MotionEvent.ACTION_DOWN) {  //表示手指按下时14 Log.i("onTouch", "按下");15         } else if (event.getAction() == MotionEvent.ACTION_UP) {//表示手指抬起时16 Log.i("onTouch", "抬起");17         }18 return false;     //表示未消耗掉这个事件19 }20 });

执行上面的代码后,单击屏幕中的按钮,将会在LogCat面板中看到如图7.11所示的结果。



说明:为一个组件同时设置单击事件与触摸事件时,触摸事件首先被执行然后执行单击事件。当触摸事件监听器返回值为ture时,说明消耗掉了这个事件,将不再执行单击事件。


本文摘自明日科技出版的《零基础学Android》作者:李磊,转载请注明出处!!!

更多相关文章

  1. 回调机制在 Android(安卓)监听用户界面操作中的体现
  2. android事件分发(二)
  3. Android(安卓)UI设计之自定义SwitchButton开关,实现类似IOS中UISw
  4. Android事件分发机制源码畅游解析(Activity篇)
  5. Android(安卓)DragAndDrop API 拖拽效果 交换ListView的Item值
  6. EventBus 3.0进阶-Delivery Threads (ThreadMode)传送线程(线程模
  7. Android(安卓)View相关-事件分发机制详解-View
  8. Android(安卓)TouchEvent 分发流程
  9. 今天体会最深的一点就是android的生命周期,

随机推荐

  1. QT Creator 构建android apk失败问题
  2. Android练习—修改背景颜色
  3. Android性能检测--traceview工具各个参数
  4. Android(安卓)示例之 notepad
  5. delphi android 中 Toast 的实现(老外写
  6. android 相机 前后摄像头判断
  7. android studio更新提示网络连接失败的解
  8. Android(安卓)MediaScannerJNI源码详解
  9. android朗读英文
  10. android webview 使用