zoukankan      html  css  js  c++  java
  • 单击事件与触摸事件的区别

    针对屏幕上的一个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     @Override
    05     public void onClick(View v) {
    06             Log.i("onClick", "单击事件");
    07         }
    08     });
    09     //为按钮添加触摸事件监听器
    10     button.setOnTouchListener(new View.OnTouchListener() {
    11     @Override
    12     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所示的结果。

     

    图7.11   显示执行顺序

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

     

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

  • 相关阅读:
    2018-2-13-安装-aria2
    ..USERstm32f10x.h(428): error: #67: expected a "}" ADC1_2_IRQn = 18, /*!
    zubax_gnss移植到STM32F407
    ChibiOS/RT移植到STM32F407
    arm-none-eabi/bin/ld: build/com.zubax.gnss.elf section `.text' will not fit in region `flash'
    Traceback (most recent call last): File "../zubax_chibios/tools/make_boot_descriptor.py", line 251
    Eclipse 交叉编译环境
    PX4/Pixhawk uORB
    FreeRTOS 任务创建和删除(静态)
    FreeRTOS 任务创建和删除(动态)
  • 原文地址:https://www.cnblogs.com/mrxy/p/7977562.html
Copyright © 2011-2022 走看看