在绘制矩形时我们一般都会这样写:
startX 起始X坐标
stopX 结束X坐标
startY起始Y坐标
stopY 结束Y坐标
然后直接调用canvas.drawRect(startX, startY, stopX, stopY, paint);进行绘制一般情况下绘制时没有问题的。因此不会发现存在的一个问题,即当所给的终点坐标有值为负数时将绘制不出矩形了。同理椭圆 绘制时也会存在这个问题,因为你看椭圆绘制canvas.drawOval(new RectF(startX, startY, stopX, stopY), paint);就可以知道了。
对于矩形我们改进的方法有两个,如果找不到原因的话,可以直接将矩形拆分为画线的方式来绘制。画四条线, 但是椭圆就难了,我暂时没找到方法。
上面的只是权宜之计,我们忘了一个规则才导致出现上面的这个情况。
既是在绘制矩形时必须这样规定起始点和终点,起始点与你坐标定义的(0,0)位置保持一致,终点在其的对角线上。比如你定义的其实点在左上角,那么你绘制图形时必须保证你的绘制起点在左上角。
下边是改进后的代码,
if(startX > stopX && startY > stopY){ // 往左上
canvas.drawRect(new RectF(stopX, stopY, startX, startY), paint);
}else if(startX < stopX && startY > stopY){// 往右上
canvas.drawRect(new RectF(startX, stopY, stopX, startY), paint);
}else if(startX > stopX && startY < stopY){// 往左下
canvas.drawRect(new RectF(stopX, startY, startX, stopY), paint);
}else if(startX < stopX && startY < stopY){// 往右下
canvas.drawRect(new RectF(startX, startY, stopX, stopY), paint);
}