基于優先級隊列寫的一個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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!