Java 如何在旋转矩形内约束接触点?
在Android中,如何在旋转矩形内约束接触点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
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;
}
}
当我移动指针时,如何使点落在四个点的矩形中?
请注意,由四个点组成的矩形是任意角度的
如何在移动事件中写入