3

我有点卡在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);
        }
4

2 回答 2

16

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

在不确切知道您对触摸事件做什么的情况下,我无法为您提供一个绝对适合您的情况的解决方案,但是如果您想接收任何触摸事件,而不是ACTION_DOWN您需要从onTouchEvent.

于 2012-07-25T13:05:14.413 回答
0

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

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

boolean public bool doTouch(MotionEvent event)

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

3)打电话时我这样做了

  public boolean onTouchEvent(MotionEvent event)
    {
        return doTouch(event);
    }
于 2012-07-31T21:16:33.250 回答