Я пытаюсь сделать простую игру перетаскивания.Чтобы не устанавливать 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;
}
});
}
}
Приветствия.