导语:Android 解决 setOnTouchListener中获取不到ACTION_MOVE的动作的问题
Android 解决 setOnTouchListener中获取不到ACTION_MOVE的动作的问题
昨天写了一段代码如下,执行时候发现捕捉不到ACTION_MOVE动作:
tv_drag.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.i(TAG,"tv_drag onTouch Y:"+event.getY()+" RawY:"+event.getRawY()); if(event.getY()>=iv_thumb.getLayoutParams().height && event.getY()<=tv_drag.getLayoutParams().height){ iv_thumb.setTranslationY(event.getY()-tv_drag.getLayoutParams().height); Log.i(TAG,"touch "+(event.getY()-tv_drag.getLayoutParams().height)); float y=(event.getY()-tv_drag.getLayoutParams().height)*(100-0)/(iv_thumb.getLayoutParams().height-tv_drag.getLayoutParams().height); if(y>99.5){ y=100; } tv_num.setText((int)y+"%"); WorkPageCommonButtonEntity e=workPageCommonButtonEntityDao.load(workPageCommonButtonEntityDao.getKey(entity)); e.setArg1((int)y); workPageCommonButtonEntityDao.update(entity); } return false; } });
上面的代码只执行了ACTION_DOWN动作。后面ACTION_MOVE和ACTION_UP都没有监听到。
后来我想,这些动作是不是被其他view抢走了。
后来我把return false改成了return true。问题解决了,能够正常监听到ACTION_MOVE和ACTION_UP。
return true表示此view需要拦截住按键的动作,不传其他动作到其他的view。完全由自己处理。return false表示不拦截,把动作事件传递给其他view处理。