我的问题是我希望圈子继续跟随手势,但要留在主圈内.我使用公式来找到使用角度和半径的点,但它做了一些时髦的东西.
我正在翻译画布,因此主圆的中心位于0,0.
这是代码:
@OverrIDeprotected 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图像中的时髦东西:
解决方法 我无法在您的代码段中验证此更改,但希望它能让您知道如何进一步继续;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视图控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)