listView滚动动画遇到的问题

本文探讨了一个在列表中实现滚动动画时遇到的Bug,即滚动到特定位置后,元素会意外返回到初始位置的问题。通过分析代码并提供解决方案,详细解释了如何在保持iOS风格滚动效果的同时,避免元素回跳至起始位置,从而提升用户体验。

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


产品需求让在列表中加入滚动动画,仿照IOS效果,效果实现了,但是有个Bug,滚动到指定位置后,又滚回第一个位置了……
没想明白原因:
int startPosition=mListView.getFirstVisiblePosition();

				final int endposition=msg.arg1;
				if(startPosition ==0 || (startPosition!=elderPosition)){
					if (startPosition == 0) {
//						mListView.smoothScrollToPosition(1);//会引起回弹
						startPosition += 1;
					}

					ValueAnimator anim = ValueAnimator.ofInt(startPosition,endposition);
					anim.setDuration(300);
					anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
						@Override
						public void onAnimationUpdate(ValueAnimator animation) {
							mListView.setSelection((Integer) animation.getAnimatedValue());
							if ((Integer) animation.getAnimatedValue() == endposition) {
								elderPosition = mListView.getFirstVisiblePosition();
							}
						}
					});
					anim.start();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值