Java 如何在旋转矩形内约束接触点?

Java 如何在旋转矩形内约束接触点?,java,android,Java,Android,在Android中,如何在旋转矩形内约束接触点 public class BoundedView extends View { private float mTouchX, mTouchY; private PointF mCenterPoint = new PointF(); private Paint mPaint; private float mStrokeWidth = 25; private int mCenterColor = Color.WHITE; private L

在Android中,如何在旋转矩形内约束接触点

public class BoundedView extends View {

private float mTouchX, mTouchY;

private PointF mCenterPoint = new PointF();

private Paint mPaint;

private float mStrokeWidth = 25;

private int mCenterColor = Color.WHITE;

private List<PointF> mBoundsPointList = new ArrayList<>(4);

public BoundedView(Context context) {
    this(context, null);
}

public BoundedView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
}

public BoundedView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    this.mPaint.setStrokeWidth(mStrokeWidth);
    this.mPaint.setStyle(Paint.Style.STROKE);
}

public void setBounds(List<PointF> points) {
    this.mBoundsPointList = points;
    mCenterPoint.set((points.get(0).x + points.get(2).x) / 2f, (points.get(0).y + points.get(2).y) / 2f);
}

@Override
protected void onDraw(Canvas canvas) {
    mPaint.setColor(mCenterColor);
    mPaint.setStyle(Paint.Style.FILL);
    canvas.drawCircle(mCenterPoint.x, mCenterPoint.y, 5f, mPaint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getPointerCount() > 1) {
        return true;
    }

    final int action = event.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
        mTouchX = event.getX();
        mTouchY = event.getY();
    } else if (action == MotionEvent.ACTION_MOVE) {
        float x = event.getX();
        float y = event.getY();
        float dx = x - mTouchX;
        float dy = y - mTouchY;
        mTouchX = x;
        mTouchY = y;
        mCenterPoint.offset(dx, dy);
        //How to constrain points in a rectangle composed of four points?
    }
    return true;
}
公共类BoundedView扩展视图{
私人浮动mTouchX,mTouchY;
私有点f mCenterPoint=新点f();
私人油漆;
专用浮动mStrokeWidth=25;
private int mCenterColor=Color.WHITE;
私有列表mBoundsPointList=新的ArrayList(4);
公共边界视图(上下文){
这个(上下文,空);
}
public BoundedView(上下文上下文,@Nullable AttributeSet attrs){
这(上下文,属性,0);
}
public BoundedView(上下文上下文,@Nullable AttributeSet attrs,int defStyleAttr){
super(上下文、attrs、defStyleAttr);
this.mPaint=新油漆(油漆.防油漆别名标志);
此.mPaint.setStrokeWidth(msStrokeWidth);
this.mPaint.setStyle(绘制.样式.笔划);
}
公共无效收进边界(列出点){
this.mBoundsPointList=点;
mCenterPoint.set((points.get(0.x+points.get(2.x)/2f,(points.get(0.y+points.get(2.y)/2f);
}
@凌驾
受保护的void onDraw(画布){
mPaint.setColor(mCenterColor);
mPaint.setStyle(油漆、样式、填充);
画布画圈(mCenterPoint.x,mCenterPoint.y,5f,mPaint);
}
@凌驾
公共布尔onTouchEvent(运动事件){
if(event.getPointerCount()>1){
返回true;
}
final int action=event.getAction();
if(action==MotionEvent.action\u DOWN){
mTouchX=event.getX();
mTouchY=event.getY();
}else if(action==MotionEvent.action\u MOVE){
float x=event.getX();
float y=event.getY();
浮点数dx=x-mTouchX;
浮动dy=y-mTouchY;
mTouchX=x;
mTouchY=y;
mCenterPoint.offset(dx,dy);
//如何约束由四个点组成的矩形中的点?
}
返回true;
}
}

当我移动指针时,如何使点落在四个点的矩形中? 请注意,由四个点组成的矩形是任意角度的

如何在移动事件中写入