1

このガイドを参考にして、最初のAndroidアプリを作成しています。現在、キャンバスに赤いボタンがあり、ユーザーがボタンをクリックすると、ボタンのビットマップが緑のボタンになるようにブール値(緑)がtrueに設定されます。

アプリケーションのその部分は機能しますが、ユーザーがキャンバスのどこをクリックしたかに関係なく機能します。ユーザーがボタンのビットマップをクリックしたときにのみブール値を変更したい。これが私のコードに現在あるものです:

onTouchEvent()メソッド

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {

        button.handleActionDown((int)event.getX(), (int)event.getY());

        if (button.isTouched()) {
            green = true;
        }
    } if (event.getAction() == MotionEvent.ACTION_MOVE) {

    } if (event.getAction() == MotionEvent.ACTION_UP) {
        if (button.isTouched()) {
            green = false;
            button.setTouched(false);
        }
    }
    return true;
}

handleActionDown()メソッド

    public void handleActionDown(int eventX, int eventY) {
    if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth()/2))) {
        if (eventY >= (y - bitmap.getHeight() / 2) && (eventY <= (y + bitmap.getHeight()/2))) {
            setTouched(true);

        } else {
            setTouched(false);
        }
    } else {
        setTouched(false);
    }
}

ACTION_DOWNイベントがそれを作成して、ビットマップのビットマップがタッチされたときにのみトリガーされるようにするために、私が欠落しているものを誰かが見ることができますか?

よろしく

4

1 に答える 1

0

ボタンで onTouchEvent を使用しないでください。ボタンの位置を計算するのではなく、特定のボタンがクリックされたかどうかを OS が検出するため、onClick を使用することをお勧めします。

まず、onClickListener を設定します。

btn.setOnClickListener(this);

これは、現在のクラスが を実装していることを前提としているView.OnClickListenerため、実装しない場合は、別のクラスを使用するか、匿名の内部クラスを作成する必要があります。

次に、onClickメソッドで、ID が一致することを確認し、実行するアクションを if ステートメント (または switch ステートメント) 内に追加します。

@Override
public void onClick(View v) {

    if(v.getId() == R.id.btn1){
        //do whatever you want on press
    }
}
于 2016-07-04T10:40:23.843 に答える