0

画面上に 4 つの異なる領域があり、それらの各領域がタッチされているかどうかを判断できるようにしたいと考えています。すべての領域には、触れた場合に true になる対応するブール値が必要です。1 つの領域が true の場合、キャンバスのその部分が別の色になります。

各領域が独立して機能することが非常に重要です。そのため、領域 1 と 2 が true で、ユーザーが領域 1 を離すと、領域 2 に影響を与えることなく、すぐに false になります。

ありがとう!

編集:私は非常に多くのことを試しましたが、最初からやり直しました。これは、キャンバスを持つ SurfaceView を持つクラスからのものです。何がどこにあるのかわかりません。

public boolean onTouch(View v, MotionEvent ev) {
    // TODO Auto-generated method stub



    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:

        x = ev.getX();
        y = ev.getY();

        if (canvasHeight != 0 && canvasWidth != 0) {

            if (x < canvasWidth/2 && y < canvasWidth/2){
            x1 = x;
            y1 = y;

            }

            if (x < canvasWidth && y > canvasHeight){
                x2 = x;
                y2 = y;
            }
        }

        break;

    case MotionEvent.ACTION_POINTER_DOWN:

        break;

    case MotionEvent.ACTION_UP:

        break;
    }

    return true;
}
4

2 に答える 2

1

これが私があなたの問題に取り組む方法です:

  • 押すことができる画面の4つの領域を定義する四角形を作成します。
  • マルチタッチを使用して、調整が定義された長方形のいずれかにあるかどうかを確認します。この場合は、画面のその領域のブール値をtrueに設定して、その領域に色がレンダリングされるようにします。座標がrectにない場合は、ブール値をfalseに設定します。

これで始められることを願っています!

アップデート:

シンプルなものから始めて、マルチタッチを使用しないことをお勧めします。xタッチメソッドでは、タッチの値と値を取得できますy。画面に触れたら、xとyをパラメータとして、このようなメソッドを呼び出すことができます。checkRegion(x,y)

このメソッドは、領域のintを返す可能性があります(この場合、一度に1つしかタッチできないため)。

public int checkRegion(int x, int y) {
int clickedRegion;

// Some code that will return the region number: 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right

return clickedRegion;

}
于 2012-08-08T20:16:56.147 に答える
0

まず、4 つの領域すべてを確認する必要があります。

switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:

        x = ev.getX();
        y = ev.getY();

        if (canvasHeight != 0 && canvasWidth != 0) {
            //you need four sections, not the two?
            if (x < canvasWidth/2 && y < canvasWidth/2){
            //set your respective canvas color to what you want it for this quadrant
            }
            if (x < canvasWidth/2 && y > canvasWidth/2){
            //set your respective canvas color to what you want it for this quadrant
            }
            if (x < canvasWidth && y > canvasHeight){
                //set your respective canvas color to what you want it for this quadrant
            }
            if (x < canvasWidth && y < canvasHeight){
                //set your respective canvas color to what you want it for this quadrant
            }
        }

        break;

    case MotionEvent.ACTION_POINTER_DOWN:

        break;

    case MotionEvent.ACTION_UP:

        break;
    }

        return true;
    }

これを機能させることができれば、action_pointer_down でもう一度実行するだけで、「セカンダリ」クリックとして登録されます。

アクションが Action_up の場合は、ユーザーが指を離した場所を見つけて、同じことを行います。考慮すべき問題の 1 つがこれです。ユーザーが第 1 象限でクリックし、第 3 象限で持ち上げるとどうなるでしょうか? 少し複雑な条件ですが、今は飛ばしていただいても構いません。

于 2012-08-08T21:02:16.613 に答える