Skip to content

基于优先级队列写的一个SmartQueue(可控制多个线程的顺序执行、View的顺序显示),利用它可以轻松实现RecyclerView、ListView等Item的进入动画,网络请求线程的顺序执行

License

Notifications You must be signed in to change notification settings

banketree/Android-SmartQueue

Repository files navigation

Android-SmartQueue

基于优先级队列写的一个SmartQueue(可控制多个线程的顺序执行、View的顺序显示)


#效果:

#Usage ##多个线程顺序执行 你可以创建一个ThreadPriorityQueue对象,然后通过.run()方法让线程开始执行,创建ThreadPriorityQueue对象的时候,你可以通过addThread()方法添加线程,其中第一个参数是Thread对象,第二个参数是你自己设置线程的优先级(值范围是1~10,优先级越高线程越先执行,当设置的值不在这个范围则默认为1):

ThreadPriorityQueue mThreadPriorityQueue = new ThreadPriorityQueue.QueueBuilder()
                        .addThread(thread1, 10).addThread(thread2, 9)
                        .addThread(thread3, 8).addThread(thread4, 7)
                        .addThread(thread5, 6).addThread(thread6, 5)
                        .create();
mThreadPriorityQueue.run();

当你想停止线程的执行,你可以调用:

if(mThreadPriorityQueue!=null){
      mThreadPriorityQueue.removeAll();//停止后续Thread任务
  }

##多个View的顺序显示 你可以添加任何的View,来控制它们的显示顺序,正如上面的效果一样,你可以控制Activity中布局的显示顺序,也可以控制列表项的显示,通过控制View的显示顺序你让界面不同的动画效果,如:

ViewPriorityQueue viewPriorityQueue = new ViewPriorityQueue.ViewBuilder(this,null).addView(views.get(3)).addView(views.get(5)).addView(views.get(4)).create();
        //View的执行顺序是按addView()的顺序,越前表示越先显示
viewPriorityQueue.run();

其中和第一种方式一样先创建一个ViewPriorityQueue对象,其中ViewBuilder()中有两个参数,第一个是当前的Activity对象,第二个是实现一个ViewAnim接口(为null表示View的显示是默认的效果,或者自己实现这个接口自定义View的显示动画效果),这个addView()方法表示添加View,越先添加的View越先显示,所以你想让某个View最先显示你可以把它第一个添加。 如下就是我自定义的一种动画效果:

ViewPriorityQueue viewPriorityQueue = new ViewPriorityQueue.ViewBuilder(new MainActivity(), new ViewAnim() {
                        @Override
                        public void beforeViewAnim(View view) {
                            DisplayMetrics metrics = getResources().getDisplayMetrics();
                            view.setAlpha(0);
                            view.animate().translationY(metrics.heightPixels).start();
                        }

                        @Override
                        public void runViewAnim(View view) {
                            view.animate().alpha(1).translationY(0).setDuration(500).start();
                        }
                    }).addView(views.get(0)).addView(views.get(7)).addView(views.get(1)).addView(views.get(6)).addView(views.get(2)).addView(views.get(3)).addView(views.get(5)).addView(views.get(4)).create();

                    viewPriorityQueue.run();

当然你也可以定义一个layout中的不同控件的显示顺序。

About

基于优先级队列写的一个SmartQueue(可控制多个线程的顺序执行、View的顺序显示),利用它可以轻松实现RecyclerView、ListView等Item的进入动画,网络请求线程的顺序执行

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages