基于優先級隊列寫的一個SmartQueue(可控制多個線程的順序執行、View的順序顯示):Android-SmartQueue
基于優先級隊列寫的一個SmartQueue(可控制多個線程的順序執行、View的順序顯示),利用它可以輕松實現RecyclerView、ListView等Item的進入動畫,網絡請求線程的順序執行。
其中和第一種方式一樣先創建一個ViewPriorityQueue對象,其中ViewBuilder()中有兩個參數,第一個是當前的Activity對象,第二個是實現一個ViewAnim接口(為null表示View的顯示是默認的效果,或者自己實現這個接口自定義View的顯示動畫效果),這個addView()方法表示添加View,越先添加的View越先顯示,所以你想讓某個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中的不同控件的顯示順序。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!