Rect.contains () не возвращает true, даже если значения содержатся - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь сделать простую игру перетаскивания.Чтобы не устанавливать setTouchListeners для каждого вида отдельно, я установил макет.

Подход, который я хочу использовать для фильтрации касаний, которые не помещаются в сам объект, спрашивает, является ли прямоугольникпредставление содержит координаты, которые я получаю в форме event.getX () и Y соответственно.

Я распечатал тост, чтобы убедиться, что он действительно содержит координаты, и это так.

Пока событие не регистрируется как истинное.

Не могли бы вы помочь?

import android.graphics.Rect;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class GameActivity extends AppCompatActivity {

    private static final String TAG = "GameActivity";

    private float x;
    private float y;

    private Integer currentXInt;
    private Integer currentYInt;


    ConstraintLayout mLayout = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);

        mLayout = findViewById(R.id.GameActivityID);
        final View viewTest = findViewById(R.id.viewTest);

       mLayout.setOnTouchListener(new View.OnTouchListener(){
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                Rect viewTestRect = new Rect(viewTest.getLeft(),viewTest.getRight(),viewTest.getTop(),viewTest.getBottom());

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

                currentXInt = Math.round(event.getX());
                currentYInt = Math.round(event.getY());

                if(viewTestRect.contains(currentXInt,currentYInt)){

                    viewTest.setX(x);
                    viewTest.setY(y);
                }
                Toast.makeText(getApplicationContext(),"view X: " + currentXInt.toString()+" view Y: " + currentYInt.toString()+ "\nRect: " + 
                        viewTestRect + "\nBool: " + viewTestRect.contains(currentXInt,currentYInt),Toast.LENGTH_LONG ).show();
                Log.d(TAG, "onTouch layout");
                return true;
            }
        });



    }
}

Приветствия.

1 Ответ

0 голосов
/ 01 марта 2019

Простая ошибка новичка, я поставил методы .get ___ () в неправильном порядке:

Rect viewTestRect = new Rect (viewTest.getLeft (), viewTest.getTop (), viewTest.getRight (), viewTest.getBottom ());

Теперь все работает нормально.

...