Android 动画 setVisibility 后出错解决方法

本文探讨了在ListView中实现加载更多功能时,遇到的动画显示异常问题,并详细解释了解决方法:通过调用`getAnimation().reset()`来解决圆环动画绕错误点旋转的问题。该解决方案涉及动画重置,确保了圆环动画以正确的方式围绕其中心点旋转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

===先说明下背景。

写的是个ListView 设置 adapter,并在列表末尾显示加载更多,点击 加载更多 时, 变成一个 圆环形的加载动画和 正在加载.

说明下,这个 加载动画是自己做得,一个圆环图片,一个 动画类等等。。

设置 onItemClickListener 后检查最后一个列表项,是 加载更多按钮的话 把 圆环设置可见,更改 文字。这些没什么好说的。

===下面是遇到的状况

刚进入列表,开始加载第一页的时候,显示都正常,圆环动画也正常。

但点击 加载更多后,圆环动画 显示异常,不是 以图片为中心自转,而是绕 图片的 (0,0)  点转。

===解决方法

经过多次测试,发现是设置 setVisibility 后,圆环图片 所在的 ImageView 的大小好像被改变。需要通知 动画。

最终设置  this.mProgressView.getAnimation().reset(); 解决动画出错.

转载于:https://www.cnblogs.com/playerc/p/3410196.html

### 关于 `setVisibility` 方法导致应用崩溃的原因分析 在 Android 开发过程中,`setVisibility` 是用于控制视图可见性的常用方法。然而,在某些情况下调用此方法可能会引发应用程序崩溃。通常这类问题源于以下几个方面: 1. **试图操作尚未附加到窗口的视图** 如果尝试在一个视图还未被添加至父容器之前就更改它的可见性,则可能导致异常抛出。这是因为此时该视图还没有完成初始化过程[^1]。 2. **线程安全问题** UI 更新必须发生在主线程上;如果从后台工作线程直接修改界面组件属性(比如通过 `setVisibility()`),那么很可能会触发 `CalledFromWrongThreadException` 异常,因为这违反了 Android 的单一线程模型原则。 3. **资源释放后的访问** 当某个 Activity 或 Fragment 已经销毁之后再对其内部控件进行更新也会造成程序不稳定甚至闪退现象发生。例如,在配置变化(屏幕旋转)期间如果不妥善处理好生命周期事件的话,很容易遇到此类状况。 针对上述提到的各种可能性,可以采取如下措施来解决问题并防止未来再次出现相同错误: #### 确认视图已正确加载后再变更其状态 确保只有当目标 View 完全准备好以后才去调整它是否显示出来。可以通过监听布局绘制完成后执行相应逻辑的方式实现这一点: ```java view.post(() -> view.setVisibility(View.VISIBLE)); ``` 这段代码利用了 `View.post(Runnable action)` API ,使得指定动作会在下一次绘图周期内被执行,从而保证了在此刻所操纵的对象已经处于可交互的状态之下。 #### 验证当前线程环境适合UI操作 任何时候想要触碰任何属于图形用户接口部分的数据结构前都应当先确认自己正处于正确的上下文中——即主线程里头。借助工具类如 `Looper.getMainLooper().equals(Looper.myLooper())` 可以轻松达成这一目的。如果不是运行在线程池中的主要循环之中,则应该采用 Handler 发送消息给主 Looper 处理待办事项列表里的任务,或者简单地使用 `runOnUiThread()` 方法来进行跨线程通信。 #### 尊重组件生命周命周期规律 务必遵循官方文档给出的最佳实践指导方针,特别是在涉及到复杂场景下的动态加载/卸载子模块时更要小心谨慎对待每一个环节。对于那些可能随时面临重建风险的地方(像横竖屏切换之类的),记得保存必要的实例变量以便快速恢复现场而不至于丢失重要信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值