1.是否包含點,矩形
判斷是否包含某個點
boolean contains(int x,int y) 函數用於判斷某個點是否在當前矩形中,如果在,則返回true ,不在則false
2.判斷是否包含某個矩形
public boolean contains(float left, float top, float right, float bottom) 判斷是否包含某個矩形
public boolean contains(RectF r)判斷是否包含某個矩形
3.判斷是否相交
public boolean intersect(float left, float top, float right, float bottom) 成員方法判斷是否相交
public boolean intersect(RectF r)成員方法判斷是否相交
static boolean intersects(RectF a, RectF b)靜態方法判斷是否相交
public void union(float left, float top, float right, float bottom)合並二個矩形,指兩個矩形合並成一個矩形,無論矩形是否相交,取兩個矩形的最小腳點作為結果矩形的左上角點,取二個矩形最大在右下角點作為結果矩形的右小角點,如果一方為空,則將有值得一方為最終結果
4.合並矩形和點
public void union(RectF r) 合並兩個矩形
public void union(float x, float y)合並兩個矩形的點,如果不相交,根據目標點的位置,將目標點設置為當前的矩形的左上角點或者右下角點,如果當前矩形是一個空矩形,則最后的矩形為([0,0],[x,y])
示例代碼:
public class BasisView extends View { private float mX; private float mY; public BasisView(Context context) { super(context); } public BasisView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public BasisView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint();//畫筆 paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); // 填充樣式//Paint.Style.FILL沒有描邊的實心圓 Paint.Style.FILL_AND_STROKE 有描邊的實心圓 Paint.Style.STROKE 空心圓環 paint.setStrokeWidth(5);//描邊寬度值 RectF rectF = new RectF(100, 10, 300, 100); if (rectF.contains(mX,mY)){ paint.setColor(Color.RED); }else { paint.setColor(Color.BLUE); } canvas.drawRect(rectF, paint); } @Override public boolean onTouchEvent(MotionEvent event) { mX = event.getX(); mY = event.getY(); if (event.getAction() == MotionEvent.ACTION_DOWN) { invalidate();//重繪控件 return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { mX = -1; mY = -1; } postInvalidate();//刷新控件屏幕 ,.讓控件重繪 return super.onTouchEvent(event); } }
效果顯示當手指下按時,如果在矩形內則顯示紅色矩形,離開則為藍色
