3

私はAndroidでこのプロジェクトにちょっとこだわっていますが、なぜこれが機能しないのかを理解しようとしていますが、私にはわかりません.これは念のためにカスタムビューです.

問題は、このイベント ACTION_DOWN が完全に機能しているということです。コンソールのデバッグ「Touching 1」と「Touching 2」を取得していますが、ACTION_UP、ACTION_CANCEL または default: は機能していません。

        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_DOWNfalse を返すとonTouchEvent、次のイベントまで関連するタッチ イベントは送信されませんACTION_DOWN

タッチイベントで何をしているのか正確にわからない場合、状況に確実に対応する解決策を提供することはできませんが、以外のタッチイベントを受け取りたい場合は、ACTION_DOWNから true を返す必要がありますonTouchEvent

于 2012-07-25T13:05:14.413 に答える
0

OK、私はこれを修正しました。私がしなければならなかったことはこれでした

1)関数を変更して、を返すことができるようにしました

boolean public bool doTouch(MotionEvent event)

2)もちろん、その関数の最後にtrueを返しました

3)それを呼び出すとき、私はこれをしました

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