Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在另一个圈子里面保持一个圆圈的android视图控件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在 android中创建一个类似pad的视图.我得到一个跟随用户手势的圆圈,我使用距离来保持圆圈越过垫控制的主圆.
我的问题是我希望圈子继续跟随手势,但要留在主圈内.我使用公式来找到使用角度和半径的点,但它做了一些时髦的东西.

我正在翻译画布,因此主圆的中心位于0,0.
这是代码

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.translate(this.mainRadius,this.mainRadius);

    canvas.drawCircle(0,this.mainRadius,this.debugPaint);
    canvas.drawCircle(this.handleX,this.handleY,this.handleRadius,this.handlePaint);
}

private void translateHandle(MotionEvent event) {
    int x = (int) (event.getX() - this.mainRadius);
    int y = (int) (event.getY() - this.mainRadius);
    double distance = distanceFromCenter(x,y);
    if (distance <= this.maxDistancE) {
        this.handleX = x;
        this.handleY = y;
    } else {
        float angle = (float) Math.todegrees(Math.atan2(y,X));
        if (angle < 0)
            angle += 360;

        this.handleX = (int) ((this.mainRadius - this.handleRadius) * Math.cos(anglE));
        this.handleY = (int) ((this.mainRadius - this.handleRadius) * Math.sin(anglE));
    }

    //onTranslateHandle(distancE);
}

这是gif图像中的时髦东西:

@L_944_8@

我无法在您的代码段中验证此更改,但希望它能让您知道如何进一步继续;

private void translateHandle(MotionEvent event) {
    float x = event.getX() - this.mainRadius;
    float y = event.getY() - this.mainRadius;
    double distance = distanceFromCenter(x,y);
    if (distance > this.maxDistancE) {
        // if Distance is i.e 2.0 and maxDistance is 1.0 ==> adjust is 0.5
        // which repositions x and y making distance 1.0 maintaining direction
        double adjust = this.maxDistance / distance;
        x = (float)(x * adjust);
        y = (float)(y * adjust);
    }
    this.handleX = (int)x;
    this.handleY = (int)y;
}

如果不能提供任何有用的结果,我可以根据需要更新答案.

大佬总结

以上是大佬教程为你收集整理的如何在另一个圈子里面保持一个圆圈的android视图控件全部内容,希望文章能够帮你解决如何在另一个圈子里面保持一个圆圈的android视图控件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。