您好,欢迎访问梧州市海静科技有限公司

Android 解决 setOnTouchListener中获取不到ACTION_MOVE的动作的问题

发布日期:2021年09月06日     浏览次数:2281
导语: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处理。


提交新评论