0

針のグラフィックを回転させるために使用される onTouchEvents を有効にするために、アクティビティに画像ボタン (pushClick) を設定しようとしています。残念ながら、画像ボタンをクリックするかどうかに関係なく、onTouchEvent はアクティブです。画像ボタンがクリックされるまで onTouchEvent が発生しないようにするにはどうすればよいですか?

public void pushClick(View pushClick) {
    switch (pushClick.getId()) {
    case R.id.btn_push:

        make(degrees);

    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        startRotating();
        break;
    case MotionEvent.ACTION_UP:
        stopRotating();
        break;
    }

    return super.onTouchEvent(event);
}

private void startRotating() {
    returnRotating = false;

    if (!keepRotating) {
        keepRotating = true;

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (keepRotating) {
                    degrees = (degrees + 1) % 360;
                    make(degrees);

                    handler.postDelayed(this, INTERVAL);
                }
            }
        }, INTERVAL);
    }
}

private void stopRotating() {
    keepRotating = false;

    if (!returnRotating) {
        returnRotating = true;

        final Handler handler = new Handler();

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (returnRotating) {
                    degrees = (degrees - 1) % 360;
                    make(degrees);

                    handler.postDelayed(this, INTERVAL);
                }
            }
        }, INTERVAL);
    }
}
4

2 に答える 2

1

これを行うにはもっと良い方法があると思いますが、ここでは私の頭の上から:

private boolean buttonClicked = false;

public void pushClick(View pushClick) {
    switch (pushClick.getId()) {
    case R.id.btn_push:
        buttonClicked = true;
        make(degrees);

    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if(buttonClicked)
    {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startRotating();
            break;
        case MotionEvent.ACTION_UP:
            stopRotating();
            break;
        }
    } 

    return super.onTouchEvent(event);
}
于 2012-05-18T03:22:10.577 に答える
0

画像ボタンが押されたときに OnTouchListener を (任意のビューから) 追加し、もう一度クリックしたときに削除することもできます (それが必要な場合)。

于 2012-05-18T03:29:04.313 に答える