【问题标题】:Android Touch UP not workingAndroid Touch UP 不工作
【发布时间】:2012-07-23 08:57:14
【问题描述】:

我有点卡在android中的这个项目上,我试图弄清楚为什么这不起作用,但我不知道。顺便说一下,这是一个自定义视图,以防万一。

问题是这个事件 ACTION_DOWN 正在完美运行我正在获取控制台调试“触摸 1”和“触摸 2”但 ACTION_UP、ACTION_CANCEL 或默认值:不工作我无法弄清楚所以任何帮助将不胜感激谢谢你

        public void doTouch(MotionEvent event)
        {
            int action = event.getAction();

            float x = event.getX();
            float y = event.getY();

            switch(action)
            {
            case MotionEvent.ACTION_DOWN:
                if(x < 125 && y < 125){
                    for(AnimatedSprite a:mSprites)
                    {
                        if(a.getID() == 1)
                        {
                            a.AdvanceToFrame(0);
                            touching = true;
                            System.out.println("Touching 1");
                            //touch_obj1 = true;
                        }
                    }
                }
                else if(x > getWidth()-125 && y > getHeight()-125)
                {
                    for(AnimatedSprite a:mSprites)
                    {
                        if(a.getID() == 2)
                        {
                            a.AdvanceToFrame(1);
                            System.out.println("Touching 2");
                            touching = true;
                            //touch_obj2 = true;
                        }
                    }
                }
                else
                {
                    touching = false;
                }
                break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:

                    System.out.println("Touch UP");
                    touching = false;
                    break;

                default:
                    System.out.println("NOT Touching");
                    touching = false;
                break;
            }
        }

这里是我调用 doTouch 函数的地方

public boolean onTouchEvent(MotionEvent event)
        {
            thread.doTouch(event);
            return super.onTouchEvent(event);
        }

【问题讨论】:

  • 你能显示调用你的doTouch方法的代码吗?具体来说,我想知道您是否从 onTouchEvent() 调用返回 true。
  • 我可以,但正如我所说,正在检测 ACTION_DOWN,但让我修改问题,以便我可以向您展示代码

标签: java android android-event


【解决方案1】:

看起来您的问题是您在onTouchEvent 中处理触摸事件的方式。如果要处理触摸事件,则需要从 onTouchEvent 返回 true。因此,如果您收到 ACTION_DOWN 并从 onTouchEvent 返回 false,系统将不会再向您发送任何相关的触摸事件,直到下一个 ACTION_DOWN 事件。

在不确切知道您对触摸事件做什么的情况下,我无法为您提供绝对适合您的情况的解决方案,但如果您想接收除ACTION_DOWN 之外的任何触摸事件,您将需要返回真实来自onTouchEvent

【讨论】:

  • 对不起,我花了这么长时间才回答,但虽然它确实符合逻辑,就像我说的行动完美,只是行动不工作,如果他们不返回 true 我猜,但也许我错了
  • 是的,正如我在回答中提到的,你将总是得到ACTION_DOWN,但你不会得到其他事件,除非你从onTouchEvent返回true以响应ACTION_DOWN 事件。
  • 好的,谢谢,因为这是有道理的,我让它成为正确的答案
【解决方案2】:

好的,我解决了这个问题,我要做的就是这样

1)我改变了函数,所以它可以返回一个

boolean public bool doTouch(MotionEvent event)

2)当然,我在该函数结束时返回了 true

3)当我调用它时,我这样做了

  public boolean onTouchEvent(MotionEvent event)
    {
        return doTouch(event);
    }

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多