今天在写项目时用到了OnTouchListener监听器,但是以前使用OnTouchListener时从来没关心过onTouch的返回值,一般情况下都是系统默认返回false,但是今天使用默认返回值貌似出现了点问题,所以就在网上查了很多资料,算是大概明白了点,下面结合代码就onTouch返回值做一些分析。

  1. package com.example.testontouch;
  2. import android.os.Bundle;
  3. import android.support.v7.app.ActionBarActivity;
  4. import android.view.MotionEvent;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.View.OnTouchListener;
  8. import android.widget.Button;
  9. public class MainActivity extends ActionBarActivity {
  10. Button btn;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. btn = (Button) findViewById(R.id.btn);
  16. btn.setOnTouchListener(new OnTouchListener() {
  17. @Override
  18. public boolean onTouch(View v, MotionEvent event) {
  19. // TODO Auto-generated method stub
  20. switch (event.getAction()) {
  21. case MotionEvent.ACTION_DOWN:
  22. System.out.println("调用ACTION_DOWN");
  23. break;
  24. case MotionEvent.ACTION_UP:
  25. System.out.println("调用ACTION_UP");
  26. break;
  27. default:
  28. break;
  29. }
  30. System.out.println("调用onTouch");
  31. return false;
  32. }
  33. });
  34. btn.setOnClickListener(new OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. // TODO Auto-generated method stub
  38. System.out.println("按钮被点击了");
  39. }
  40. });
  41. }
  42. }

返回值为true时点击按钮时log:

返回值为false点击按钮时log:

android状态对应的回调函数(Android中onTouch返回值含义)(1)

由运行结果(截图)我们不难发现,在onTouch返回值为 true时,当点击按钮后Button的OnClickListener监听器并不能监听到按钮的点击事件。在onTouch返回值为 false时,在点击按钮后Button的OnClickListener监听器可以正常的监听到onClick事件。

查阅官方文档:True if the listener has consumed the event, false otherwise。大概意思就是当返回值为true时当前点击事件被onTouch消耗掉,否则当前点击事件没有被onTouch消耗掉。

结合文档及上面结果可以做如下总结:

onTouch返回值总结:return false 表示当前点击事件没有被onTouch消耗掉可以继续向下传递。例如本例,当返回值为false的时候,onClick可以继续监听到点击事件。

return true 表示当前点击事件被onTouch消耗掉不能再被传到下一个监听事件。如本例,当返回值为true的时候, onClick无法捕获到按钮的点击事件。

:以上总结为个人见解,如有不妥之处还望指出。

,