首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android 中如何很好的解决setOnClickListener和setOnTouchListener冲突

2012-09-14 
android 中怎么很好的解决setOnClickListener和setOnTouchListener冲突在android应用中我做了一个悬浮框,

android 中怎么很好的解决setOnClickListener和setOnTouchListener冲突
在android应用中我做了一个悬浮框,布局界面就一个button,我怎么区分我是做了这个按钮的setOnClickListener还是setOnTouchListener事件,setOnTouchListener是使这个按钮移动,setOnClickListener是点击这个按钮触发的事件,但往往只有触发一个事情,怎样才能很好的解决这个问题,请教高手,贴几行代码?

[解决办法]
setOnTouchListener是监控从点下鼠标 (可能拖动鼠标)到放开鼠标(鼠标可以换成手指)的整个过程 ,他的回调函数是onTouchEvent(MotionEvent event),然后通过判断event.getAction()是MotionEvent.ACTION_UP还是ACTION_DOWN还是ACTION_MOVE分别作不同行为。


setOnClickListener的监控时间只监控到手指ACTION_DOWN时发生的行为
[解决办法]

探讨

setOnTouchListener是监控从点下鼠标 (可能拖动鼠标)到放开鼠标(鼠标可以换成手指)的整个过程 ,他的回调函数是onTouchEvent(MotionEvent event),然后通过判断event.getAction()是MotionEvent.ACTION_UP还是ACTION_DOWN还是ACTION_MOVE分别作不同行为。


setOnClickListener……

[解决办法]
可以不用setOnClickListener这个监听,将该监听的内容放在onTouchEvent的ACTION_DOWN来处理
[解决办法]
探讨
因为我既要处理按钮的点击事件,又要触发按钮的onTouchEvent事件的时间不触发onclick事件,真不知道该怎样很好的处理,看网上有些代码是加上一个判断标志,请教该如果处理

[解决办法]
你的需求理解了。用不到信号量,也用不到onclick,只要用一个变量记录的ACTION_MOVE的x,y。来判断是否移动了就行。
case MotionEvent.ACTION_MOVE:
x = (int) event.getX();
y = (int) event.getY();
break;
case MotionEvent.ACTION_UP:
if(x...&&y..){移动的处理}else{点击的处理}

PS:x,y具体的判断值因你的布局而异。
因为有的时候手指按下的时候可能会有小小的移动,所以你判断的时候可以当X,Y足够小的情况下视为正常按下。

热点排行