给listview加动画,让动画执行结束后再刷新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给listview加动画,让动画执行结束后再刷新相关的知识,希望对你有一定的参考价值。
问题:当给listview的条目加动画时,例如添加一个条目或者移除一个条目,动画效果会和添加删除条目的逻辑同时进行,因为动画并不是阻塞式的,这样会造成动画还没有结束,条目已经添加或者移除,从而动画作用在下面一个条目上面。
解决办法:想办法让动画执行完了之后再进行条目的添加或者移除操作(也就是刷新数据适配器),可以通过设置动画监听来实现,将要添加或者删除条目的逻辑放到动画监听的方法中,可以放到动画结束时调用的方法中,这样就保证了动画先执行,然后才刷新数据适配器
holder.iv_lock.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 添加动画效果 animationView.startAnimation(mTranslateAnimation); // 对动画执行过程做事件监听,监听到动画执行完成后,再去移除集合中的数据,操作数据库,刷新界面 mTranslateAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // 动画开始的时候调用 } @Override public void onAnimationRepeat(Animation animation) { // 动画重复的时候调用 } @Override public void onAnimationEnd(Animation animation) { // 动画结束的时候调用 if (isLock) { // 已加锁------>未加锁 // 1.已加锁集合删除一个,未加锁集合添加一个,对象就是getItem方法获取的对象 mAppLockList.remove(appInfo); mAppUnLockList.add(appInfo); // 2.从已加锁的数据库中删除一条数据 mDao.delete(appInfo.packageName); // 3.刷新数据适配器 mLockAdapter.notifyDataSetChanged(); }else { // 未加锁------>已加锁 // 1.未加锁集合删除一个,已加锁集合添加一个,对象就是getItem方法获取的对象 mAppLockList.add(appInfo); mAppUnLockList.remove(appInfo); // 2.从已加锁的数据库中插入一条数据 mDao.insert(appInfo.packageName); // 3.刷新数据适配器 mUnLockAdapter.notifyDataSetChanged(); } } }); } });
以上是关于给listview加动画,让动画执行结束后再刷新的主要内容,如果未能解决你的问题,请参考以下文章
如何用js使得一个已经结束的css的animation动画重新执行一遍