GooView.java 文件源码

java
阅读 22 收藏 0 点赞 0 评论 0

项目:BageView 作者:
/** 通过绘制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;
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号