`

onTouchEvent 中onTouch的返回值的意义

阅读更多
今天想捕获Gallery的Touch事件做自己想要的处理,但你添加完setOnTouchListener监听完之后eclipse自动会生成一个onTouch方法,就可以在这里面做你想要做的处理了,若你小心地看它会增加return false这行。我在处理完Event.ACTION_MOVE时将其改为return true。当我运行我的程序的时候发现Gallery不能左右滚动了。我就觉得很纳闷了,怎么不能滚动了呢?然后一个朋友提示我应该return false.我改完运行后,果真可以滚动了,并且我在move的时候也实现了我的处理。当时我就在想:return false和return true有何区别呢?

下面就是我在别的文章学习总结来的结论:
1,return false说明你还没消费onTouch事件,在执行完你onTouch里面的代码之后,onTouch事件并没有结束。就是会自动地执行Gallery这个view里onTouch代码(这个为默认).所以这就是为什么没增加你的处理的时候就只自动地调用Gallery的onTouch,若你在onTouch里面增加你的代码并且return false就会执行你的处理和默认的处理。

2,return true说明你已经消费完了onTouch事件,在执行完你的onTouch里面的代码之后,这个onTouch事件就结束了。也就是说不会再调用默认的onTouch事件了。在onTouch里面有很多种的处理比如move,down,up....,若你在move里面return false,那么接着的fling,up等后面的事件也不会处理的。


mGallery.setOnTouchListener(new OnTouchListener(){

			//@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				System.out.println("Gallery onTouch");
				if(event.getAction()==MotionEvent.ACTION_MOVE){
					mDismiss.removeMessages(1);
					System.out.println("ACTION_MOVE ");
					
				}else if(event.getAction()==MotionEvent.ACTION_UP){
					mDismiss.sendEmptyMessageDelayed(1,10000);
					System.out.println("ACTION_UP ");
				}
				return false;
			}
			
		});


分享到:
评论
5 楼 lusheng0596 2013-08-02  
前几天我做了一个测试,不过测试的结果与你的相反。当return false的时候,该ontouch方法就不再执行里面的代码了,而return true的时候,则是会继续监听着的。
4 楼 lenomon 2012-04-07  
追求幸福 写道
lenomon 写道
这篇详细,希望有帮助,Android事件传递机制【Touch事件】

Thanks!

不用谢,多多关注,嘿嘿。

这里有个关于垂直滚动的方法汇总:android垂直自动滚动
3 楼 追求幸福 2012-04-05  
lenomon 写道
这篇详细,希望有帮助,Android事件传递机制【Touch事件】

Thanks!
2 楼 lenomon 2012-04-02  
这篇详细,希望有帮助,Android事件传递机制【Touch事件】
1 楼 fengzhonghun 2011-09-06  
写反了吧!

相关推荐

    Android onTouchEvent事件中onTouch方法返回值(介绍)

    本文将详细介绍`onTouchEvent`中`onTouch`方法的返回值及其影响。 `onTouchEvent` 方法接收两个参数:一个`View`对象(通常是你希望监听触摸事件的视图)和一个`MotionEvent`对象,后者包含了触摸事件的所有详细...

    Android onTouch机制

    此外,`onTouchEvent`的返回值非常重要。如果返回`true`,表示View已经消费了事件,事件不会继续向父View传递;如果返回`false`,事件会被回溯,允许其他View有机会处理。开发者可以根据业务需求灵活调整这一逻辑,...

    onTouch测试

    `onTouch`返回值至关重要,`true`表示消费了事件,系统不再向下分发;`false`则表示未完全处理,事件可能继续传递给父`View`。在实际应用中,我们可能需要根据业务逻辑决定是否消耗事件,例如,只在特定条件下执行...

    2011.08.30——— android setOnTouchListener onTouchEvent

    这时,可以在`setOnTouchListener`的`onTouch`方法中处理自定义逻辑,并返回`false`,这样事件仍然可以传递给`onTouchEvent`进行处理。 `TestOnTouchEventAndTouchListener`这个文件名可能指的是一个测试项目,用于...

    Android运用onTouchEvent自定义滑动布局

    我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件。 1、boolean onTouch(View v, MotionVent event) 触摸事件发送到视图时调用(v:视图,event:触摸事件) 返回...

    浅谈onTouch先执行,还是onClick执行(详解)

    3. `onTouch`的返回值决定事件是否继续传递给`onTouchEvent`。 4. 如果`onTouch`返回`false`,`ACTION_UP`时`onClick`会被调用。 5. 如果`onTouch`返回`true`,`onClick`不会被调用。 理解这一机制对于优化用户界面...

    android事件的分发

    同时,合理地处理`onTouchEvent`返回值可以防止事件泄漏,确保用户体验流畅。 总的来说,Android的事件分发机制是构建用户界面交互的重要基础,熟练掌握这一机制,能够帮助开发者更好地控制UI的行为,提供更加个性...

    ViewEventDispatch.zip

    `onTouch()`是`View.OnTouchListener`接口中的方法,与`onTouchEvent()`类似,用于监听触摸事件。开发者可以设置`OnTouchListener`为View,以在特定View上捕获触摸事件。`onTouch()`的返回值同样决定事件是否被消费...

    android面试题目整理

    `onTouch`的返回值决定事件是否继续传播。如果返回false,事件会调用`onTouchEvent`。此时,如果View是`clickable`或`longclickable`,`onTouchEvent`通常会返回true,表示事件被消费。如果设置了`...

    Android从源码的角度彻底理解事件分发机制的解析(上)

    在上述内容中提到的例子中,我们看到当同时设置了`OnClickListener`和`OnTouchListener`时,`onTouch`会先于`onClick`执行。这是因为`onTouch`是直接处理MotionEvent的,而`onClick`是在`ACTION_UP`事件中触发的。当...

    Android 滑动监听的实例详解

    当在TextView上添加滑动监听时,如果onTouch方法返回false,则表示当前的触摸事件没有被完全处理,那么Activity中的onTouchEvent方法也会被调用,处理事件。如果TextView的onTouch方法返回true,则表示事件已经被...

    android面试

    - `View`的`onTouchEvent`方法是否执行与其`OnTouchListener`回调方法`onTouch`的返回值密切相关。若`onTouch`返回`false`,则`onTouchEvent`方法将被执行。 #### 三、总结 理解Android中的事件分发机制对于编写...

    android面试题集锦(珍藏)

    - **onTouchEvent()执行条件**: `View`的`onTouchEvent()`是否执行取决于`onTouchListener`的`onTouch()`方法的返回值。 #### 五、总结 通过以上分析,我们可以看出Android的事件分发机制是一个复杂而精细的过程。...

    Activity 左右滑动Demo

    这通常通过在`onTouchEvent()`方法中调用`GestureDetector`的`onTouchEvent()`方法并根据返回值来决定是否让ListView处理触摸事件。 事件传递机制在Android中至关重要。当用户触摸屏幕时,事件会沿着View层次结构自...

    Android事件分发机制(下) View的事件处理

    `onTouch`方法的返回值决定了事件是否被当前View消费,如果返回true,表示事件已被处理,`dispatchTouchEvent`将返回true,不会继续调用`onTouchEvent`方法。这意味着`OnTouchListener`的优先级高于`onTouchEvent`,...

    全面的Android view相关知识汇总整理

    除此之外,还有其他重要的View相关知识点,如触摸事件的分发规则(如`onTouchEvent()`的返回值影响事件传递),自定义View的实现,以及View的性能优化,比如复用convertView在AdapterView中的应用,避免在`onDraw()`...

Global site tag (gtag.js) - Google Analytics