MotionEvent和触摸检测器?

我想问个问题:

我使用了一个MotionEvent代码来拖动正在处理的问答游戏的按钮,但事实是,开始拖动后,我无法再单击被拖动的按钮,看起来它始终处于ACTION_DOWN状态,我也尝试了CANCEL和UP操作,但还是一样!

另外,当拖动的按钮[btn1]触摸另一个按钮[btn2]时,如何使被拖动的按钮触摸其他按钮或项目(例如我希望它检测到其他项目的触摸)时会做些什么?例如!!

3个问题:

  • 它不会起床

  • 你不能再点击它

  • 触摸检测

任何建议如何解决该PLZ!和提前


Qyouu
浏览 119回答 2
2回答

温温酱

改变这个button1.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    button1.setOnTouchListener(new OnTouchListener() {                        PointF DownPT = new PointF();                        PointF StartPT = new PointF();                        @Override public boolean onTouch(View v, MotionEvent event) {                            int eid = event.getAction();                            switch (eid) {                                case MotionEvent.ACTION_MOVE:PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);                                button1.setX((int)(StartPT.x+mv.x));                                button1.setY((int)(StartPT.y+mv.y));                                StartPT = new PointF(button1.getX(), button1.getY());                                break;                                case MotionEvent.ACTION_DOWN : DownPT.x = event.getX();                                DownPT.y = event.getY();                                StartPT = new PointF(button1.getX(), button1.getY());                                break;                                case MotionEvent.ACTION_UP :                                break;                                default : break;                            }                            return true;                        }                    });                    textview13.setText(message);                }            });对此int lastAction;    button1.setOnTouchListener(new OnTouchListener() {                            PointF DownPT = new PointF();                            PointF StartPT = new PointF();                            @Override public boolean onTouch(View v, MotionEvent event) {                                int eid = event.getAction();                                switch (eid) {                                    case MotionEvent.ACTION_MOVE:PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);                                    button1.setX((int)(StartPT.x+mv.x));                                    button1.setY((int)(StartPT.y+mv.y));                                    StartPT = new PointF(button1.getX(), button1.getY());                                    lastAction = MotionEvent.ACTION_MOVE;                                    break;                                    case MotionEvent.ACTION_DOWN : DownPT.x = event.getX();                                    DownPT.y = event.getY();                                    StartPT = new PointF(button1.getX(), button1.getY());                                    lastAction = MotionEvent.ACTION_DOWN;                                    break;                                    case MotionEvent.ACTION_UP :                                    if(lastAction == MotionEvent.ACTION_DOWN){                                      textview13.setText(message);                                     }                                    lastAction = MotionEvent.ACTION_UP;                                    break;                                    default : break;                                }                                return true;                            }                        });对于第二部分,您需要具有其他项目坐标的坐标,然后检查您的event.getY()或event.getX()是否在其他项目坐标的范围内。

一只名叫tom的猫

哇 !我不小心找到了解决方案所有的问题!我只是改变了:return true; 至 return false;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java