给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动画重新执行一遍

如何在listview和scrollview结束时关闭wave动画

ListView的Item动画

Listview 项目动画在滚动时停止

Android给ListView添加一个入场动画

Android TextView数字增长动画效果