Android中onTouch返回值含义

来源:互联网 发布:部落冲突防空升级数据 编辑:程序博客网 时间:2024/06/03 17:02

今天在写项目时用到了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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);btn.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubswitch (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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubSystem.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无法捕获到按钮的点击事件。

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

0 0
原创粉丝点击