/** 通过绘制Path构建一个ShapeDrawable,用来绘制到画布Canvas上 **/
private ShapeDrawable drawGooView() {
Path path = new Path();
// 1. 根据当前两圆圆心的距离计算出固定圆的半径
float distance = GeometryUtil.getDistanceBetween2Points(mDragPoint, mStickPoint);
tempRadius = getCurrentRadius(distance);
// 2. 计算出经过两圆圆心连线的垂线的dragLineK(对边比临边)。求出四个交点坐标
float xDiff = mStickPoint.x - mDragPoint.x;
Double dragLineK = null;
if (xDiff != 0) {
dragLineK = (double) ((mStickPoint.y - mDragPoint.y) / xDiff);
}
// 分别获得经过两圆圆心连线的垂线与圆的交点(两条垂线平行,所以dragLineK相等)。
PointF[] dragPoints = GeometryUtil.getIntersectionPoints(mDragPoint, dragRadius,
dragLineK);
PointF[] stickPoints = GeometryUtil.getIntersectionPoints(mStickPoint,
tempRadius, dragLineK);
// 3. 以两圆连线的0.618处作为 贝塞尔曲线 的控制点。(选一个中间点附近的控制点)
PointF newPoint = GeometryUtil.getPointByPercent(mDragPoint, mStickPoint, 0.618f);
// 绘制两圆连接
path.moveTo(stickPoints[0].x, stickPoints[0].y);
path.quadTo(newPoint.x, newPoint.y, dragPoints[0].x, dragPoints[0].y);
path.lineTo(dragPoints[1].x, dragPoints[1].y);
path.quadTo(newPoint.x, newPoint.y, stickPoints[1].x, stickPoints[1].y);
path.close();
// 将四个交点画到屏幕上
// drawAssistPoint(path, dragPoints, stickPoints);
// 构建ShapeDrawable
ShapeDrawable shapeDrawable = new ShapeDrawable(new PathShape(path, 50f, 50f));
shapeDrawable.getPaint().setColor(Color.RED);
return shapeDrawable;
}
GooView.java 文件源码
java
阅读 22
收藏 0
点赞 0
评论 0
项目:BageView
作者:
评论列表
文章目录