关于ListView循环播放的一些事情

最近有任务,在一个ListView里面有两个item,需要循环播放,还要加一些动画


首先说一下ListView的无限循环:

原来使用的是较多个item(在适配器中的getCount中返回较大的数值),有一个弊端就是用户滚动的时候,会发现好多个重复的。之后在美工那里获得点灵感,使用三个循环,第一个和最后一个是相同的,当滚动到第三个的时候,把它换成第一个。

	Handler handler = new Handler() {

		@SuppressLint("NewApi")
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			a = (int) msg.obj;
			if (msg.what == 1) {			
				listView.smoothScrollToPositionFromTop(a, -2, 1000);
			} else if (msg.what == 2) {
				listView.setSelection(0);
			}
		}
	};

上面是处理滚动的代码,在发送Message的时候,有一个延迟,否则看到item会有闪一下,就不好了


其次是关于缩放的动画效果:

动画效果都好实现,但是在什么时候加载就不好控制了。因为使用了适配器,动画在的加载时间是适配器控制的,注意使用动画的延时就好了。

接着引出了第三个问题,smoothScrollToPositionFromTop  经常会定位不准,这样就会导致即使设置了动画的延时,但是item的初始化时间会有变化,动画还是会经常失效的,产生错误时间的动画,怎么让smoothScrollToPositionFromTop 定位准确一点,不去干扰动画初始化的时间呢?

listView.setOnScrollListener(new OnScrollListener() {
			
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				if(scrollState == SCROLL_STATE_IDLE){
					listView.setSelection(a);
				}
			}
			
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
				
				
			}
		});

原理就是当listView不滚动的时候(即smoothScrollToPositionFromTop完成的时候),使用setSelection去定位item,这样的话就不会产生位置错误了。

//自动滚动动作
	private void autoScroll(){
		
		
		lv_index = 0;
		if(null!=autoUpdate){
			autoUpdate.cancel();
		}
		autoUpdate = new Timer();
		autoUpdate.schedule(new TimerTask() {
			@Override
			public void run() {
				if (lv_index >= listView.getCount()) {
					lv_index = 0;
				}
				if (lv_index >= 0) {
					Message msg = new Message();
					msg.what = 1;
					msg.obj = lv_index;
					handler.sendMessage(msg);
				}
				if (lv_index == 2) {
					lv_index = 0;
					Message msg = new Message();
					msg.what = 2;
					msg.obj = lv_index;
					handler.sendMessageDelayed(msg, 1000);
					
				}

				lv_index += 1;
			}
		}, 0, 3500);
	}

这里是让listView自动滚动的代码。


有不太稳妥的地方欢迎讨论,要是有更好的解决方法,不吝赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值