即使包含值,Rect.contains()也不返回true

问题描述 投票:0回答:1

我正在尝试制作一个简单的拖放游戏。为了不必在每个视图上单独设置setTouchListeners,我设置了布局。

我想用来过滤未放置在对象本身上的触摸的方法是询问视图的rect是否包含我分别从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;
            }
        });



    }
}

干杯。

android 2d ontouchlistener rect
1个回答
0
投票

一个简单的新手错误,我把.get ___()方法放错了顺序,应该是:

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

现在一切都很好。

© www.soinside.com 2019 - 2024. All rights reserved.