今天在写项目时用到了OnTouchListener监听器,但是以前使用OnTouchListener时从来没关心过onTouch的返回值,一般情况下都是系统默认返回false,但是今天使用默认返回值貌似出现了点问题,所以就在网上查了很多资料,算是大概明白了点,下面结合代码就onTouch返回值做一些分析。
- package com.example.testontouch;
- import android.os.Bundle;
- import android.support.v7.app.ActionBarActivity;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.View.OnTouchListener;
- import android.widget.Button;
- public class MainActivity extends ActionBarActivity {
- Button btn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btn = (Button) findViewById(R.id.btn);
- btn.setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- // TODO Auto-generated method stub
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- System.out.println("调用ACTION_DOWN");
- break;
- case MotionEvent.ACTION_UP:
- System.out.println("调用ACTION_UP");
- break;
- default:
- break;
- }
- System.out.println("调用onTouch");
- return false;
- }
- });
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- System.out.println("按钮被点击了");
- }
- });
- }
- }
返回值为true时点击按钮时log:
返回值为false点击按钮时log:
由运行结果(截图)我们不难发现,在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无法捕获到按钮的点击事件。
注:以上总结为个人见解,如有不妥之处还望指出。
,