Android Xamarin Java如何实现ImageView点击无限循环逐次向左旋转90度
问题根因
现有代码的异常来自动画差值计算逻辑:当计数器归零后,当前View的旋转值为360°,下一次要跳转的目标值为90°,系统默认会取最短路径完成动画,最终表现为反向旋转270°,而非预期的继续左转90°。
可行解决方案
方案1(推荐,无需维护计数器)
直接基于ImageView当前的旋转角度累加偏移量即可,安卓Rotation属性支持任意正负浮点数,无需限制在0~360范围内,逻辑最简单稳定:
private void Rotate_Click(object sender, EventArgs e) { // 向左转对应逆时针旋转,所以减90f;如果需求是顺时针左转,改为+90f即可 float targetRotation = imageView.Rotation - 90f; // SetDuration可自定义动画时长,单位为毫秒 imageView.Animate().Rotation(targetRotation).SetDuration(300).Start(); }
方案2(保留计数器逻辑的修复版)
如果要保留原有计数器的实现,需要在360°动画结束后静默重置旋转值为0,避免用户感知到跳转:
private int rotation_count = 0; private void Rotate_Click(object sender, EventArgs e) { rotation_count += 1; if (rotation_count == 1) { imageView.Animate().Rotation(90f).Start(); } else if(rotation_count == 2) { imageView.Animate().Rotation(180f).Start(); } else if(rotation_count == 3) { imageView.Animate().Rotation(270f).Start(); } else { // 动画结束后静默把旋转值重置为0,用户无感知 imageView.Animate().Rotation(360f).WithEndAction(() => { imageView.Rotation = 0f; }).Start(); rotation_count = 0; } }
内容的提问来源于stack exchange,提问作者user16612111
相关产品推荐
相关产品推荐

