Android开发中OnTouchListener接口的返回值问题

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等后面的事件也不会处理的。


Java代码   收藏代码
  1. mGallery.setOnTouchListener(new OnTouchListener(){  
  2.   
  3.             //@Override  
  4.             public boolean onTouch(View v, MotionEvent event) {  
  5.                 // TODO Auto-generated method stub  
  6.                 System.out.println("Gallery onTouch");  
  7.                 if(event.getAction()==MotionEvent.ACTION_MOVE){  
  8.                     mDismiss.removeMessages(1);  
  9.                     System.out.println("ACTION_MOVE ");  
  10.                       
  11.                 }else if(event.getAction()==MotionEvent.ACTION_UP){  
  12.                     mDismiss.sendEmptyMessageDelayed(1,10000);  
  13.                     System.out.println("ACTION_UP ");  
  14.                 }  
  15.                 return false;  
  16.             }  
  17.               
  18.         }); 

Android Developers上查看了一下这个接口和这个方法,文档中对该方法的返回值描述如下:True if the listener has consumed the event, false otherwise。大概意思就是说,如果返回true,则表示监听器消耗了该事件(我的理解就是不用继续向上传递该事件了,该事件的传递到此为止);否则返回false。这样一想,我觉得之前返回false,可能造成之后检测到的事件向上传递了,而没有在该监听函数中处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android实现拖动效果可以通过以下步骤来实现: 1. 首先,需要在XML布局文件定义一个可拖动的视图,比如一个ImageView,并为其设置一个唯一的ID。 2. 在Java代码,定义一个OnTouchListener监听器,用于监听该视图的触摸事件。 3. 在该监听器,实现onTouch()方法,通过获取触摸事件的坐标值,来实现视图拖动的效果。可以使用View的layout()方法来重新定位视图的位置。 以下是一个简单的实现示例代码: ```java ImageView mImageView = findViewById(R.id.imageView); mImageView.setOnTouchListener(new OnTouchListener() { int startX, startY, offsetX, offsetY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) event.getRawX(); startY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int moveX = (int) event.getRawX(); int moveY = (int) event.getRawY(); offsetX = moveX - startX; offsetY = moveY - startY; mImageView.layout(mImageView.getLeft() + offsetX, mImageView.getTop() + offsetY, mImageView.getRight() + offsetX, mImageView.getBottom() + offsetY); startX = moveX; startY = moveY; break; } return true; } }); ``` 在这个代码,我们使用ImageView作为可拖动的视图,并为其设置了一个OnTouchListener监听器。在监听器,我们通过获取触摸事件的坐标值,来计算移动的偏移量,并通过View的layout()方法来重新定位视图的位置,从而实现拖动效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值