导语: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处理。
