为了账号安全,请及时绑定邮箱和手机立即绑定

MotionEvent和触摸检测器?

MotionEvent和触摸检测器?

Qyouu 2021-04-08 14:15:13
我想问个问题:我使用了一个MotionEvent代码来拖动正在处理的问答游戏的按钮,但事实是,开始拖动后,我无法再单击被拖动的按钮,看起来它始终处于ACTION_DOWN状态,我也尝试了CANCEL和UP操作,但还是一样!另外,当拖动的按钮[btn1]触摸另一个按钮[btn2]时,如何使被拖动的按钮触摸其他按钮或项目(例如我希望它检测到其他项目的触摸)时会做些什么?例如!!3个问题:它不会起床你不能再点击它触摸检测任何建议如何解决该PLZ!和提前
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

改变这个


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()是否在其他项目坐标的范围内。


查看完整回答
反对 回复 2021-04-21
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

哇 !我不小心找到了解决方案

所有的问题!

我只是改变了:

return true; 至 return false;


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信