Android开发:如何检测ImageView的旋转角度(每次点击转30度)
问题描述
我实现了点击按钮让ImageView每次旋转30度的功能,想要检测该ImageView是否旋转至30度、60度的状态。以下是我尝试的代码:
float rotation = image_circle.getRotation(); if (rotation == 31) { image_circle.setVisibility(View.INVISIBLE); }
附带旋转按钮图标、代码截图。
解决方案
直接用==判断浮点数容易因为精度问题出现判断失效的情况,同时你代码里判断的是31度,和需求的30、60度不符,这里给两种可靠的解决方式:
方式1:通过记录旋转次数判断(推荐)
每次点击旋转按钮时,维护一个计数器来记录旋转次数,这样能完全避免浮点数精度问题:
// 全局或成员变量定义计数器 int rotateTimes = 0; // 按钮点击事件里的代码 rotateTimes++; image_circle.setRotation(rotateTimes * 30f); // 判断是否旋转到30度(1次)或60度(2次) if (rotateTimes == 1 || rotateTimes == 2) { image_circle.setVisibility(View.INVISIBLE); }
方式2:处理浮点数精度误差
如果必须依赖getRotation()的返回值,不要直接用相等判断,而是判断值是否在目标角度的误差范围内:
float rotation = image_circle.getRotation(); // 设置±0.5的误差范围,避免浮点数精度问题 if (Math.abs(rotation - 30f) < 0.5f || Math.abs(rotation - 60f) < 0.5f) { image_circle.setVisibility(View.INVISIBLE); }
内容的提问来源于stack exchange,提问作者Maze Noone
相关产品推荐
相关产品推荐

