Java 围绕中心点旋转一条线
我目前正在做一个有计时器的游戏 随着时间的推移,红线应该围绕其中心点旋转,当时间结束时,红线在另一侧结束。我现在让线旋转,它始终保持相同的长度,但它偶尔移动,动画不平滑。我不完全确定我做错了什么Java 围绕中心点旋转一条线,java,android,android-studio,geometry,Java,Android,Android Studio,Geometry,我目前正在做一个有计时器的游戏 随着时间的推移,红线应该围绕其中心点旋转,当时间结束时,红线在另一侧结束。我现在让线旋转,它始终保持相同的长度,但它偶尔移动,动画不平滑。我不完全确定我做错了什么 startX和Y是直线的起点和终点,endX和Y是直线在250 psi时的终点 1) 使用float类型而不是int的动画师,因为我认为更新调用的时间不能保证精确到毫秒,因此您强制它截断该值,因为该值实际上是使用持续时间的0到1之间的分数(float)计算的 e、 g.在一个完美的世界中,0到20的计时
startX和Y是直线的起点和终点,endX和Y是直线在250 psi时的终点 1) 使用float类型而不是int的动画师,因为我认为更新调用的时间不能保证精确到毫秒,因此您强制它截断该值,因为该值实际上是使用持续时间的0到1之间的分数(float)计算的 e、 g.在一个完美的世界中,0到20的计时顺序开始如下:-
- 0ms=0
- 500ms=1
- 1000ms=2
- 0ms=0
- 499ms=0.999(转换为整数时也将为0)
- 1000ms=2
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.util.AttributeSet;
导入android.view.view;
公共类抽绳扩展视图{
油漆=新油漆();
私有void init(){
油漆。设置颜色(颜色。黑色);
}
公共抽绳(上下文){
超级(上下文);
init();
}
公共绘制线(上下文、属性集属性){
超级(上下文,attrs);
init();
}
公共绘制线(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
init();
}
@凌驾
公共空白onDraw(画布){
帆布.抽绳(100150150,油漆);
}
}
public类MainActivity扩展了AppCompatActivity{
抽绳抽绳;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
抽绳=新抽绳(本);
抽绳。设置枢轴X(100f);
抽绳。设置枢轴(100f);
setContentView(抽绳);
ValueAnimator animator=ValueAnimator.offload(0f,20f);
设置持续时间(10000);
setInterpolator(新的LinearInterpolator());
animator.addUpdateListener(新值animator.AnimatorUpdateListener(){
@凌驾
动画更新上的公共无效(ValueAnimator动画){
float x=(float)animation.getAnimatedValue();
抽绳。设置旋转(x);
drawLine.invalidate();
}
});
animator.start();
}
}
您还使用了整数,因此指针只能在20个离散位置中的一个位置上使用。请改用浮点
。数学触发函数的参数是弧度,而不是度;你把针移动得太快了,而且它正在缠绕。试试看,ValueAnimator.offload(Math.toRadians(-120),Math.toRadians(120))代码>取而代之,不要加-80。@greeble31非常感谢!这至少修复了它的动画方面。