Android開發執行緒迴圈輪播顯示
阿新 • • 發佈:2019-01-09
需求:圖片超過兩張迴圈輪播顯示
思路:首先不能在主執行緒上寫一個死迴圈輪播對吧,執行久了有可能主執行緒會卡頓。
新開一個子執行緒,另外你要操作介面上的東西,還需要Handler結合一起使用,迴圈輪播很簡單就能想到用求餘方法,還有一點它要超過兩張才迴圈,少於兩張即不迴圈
所以還有一個變數來控制是否執行緒裡面內容是否一直迴圈下去,不過執行緒還是存在的,希望不要多次new執行緒出來。
下面基本程式碼:
private boolean running = true; private ArrayList<TopicManagerListInfo> adminPathList=new ArrayList<TopicManagerListInfo>(); private int newPosition = 0; private Thread managerPathThread;
if(managerPathThread==null){
managerPathThread=new Thread(r);
managerPathThread.start();
}
這是我專案中的程式碼,基本實現思路,具體情況再具體分析@Override protected void onDestroy() { super.onDestroy(); instance = null; running = false; } private Runnable r = new Runnable() { @Override public void run() { while (running) { handler.sendEmptyMessage(0); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } }; @Override protected void onStop() { running = false; super.onStop(); } @Override protected void onRestart() { running=true; super.onRestart(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { //輪播迴圈 if(adminPathList !=null ) { adminPortraitLoop(adminPathList); } } }; private void adminPortraitLoop(ArrayList<TopicManagerListInfo> adminList){ if(adminList !=null && adminList.size()>0){ int size=adminList.size(); if(newPosition==Integer.MAX_VALUE){ newPosition=0; } int position = newPosition % size; if(position==(size-1)){ topic_admin_portrait2.setImageURI(Uri.parse(adminList.get(0).getAvatarPath())); }else{ topic_admin_portrait2.setImageURI(Uri.parse(adminList.get(position+1).getAvatarPath())); } topic_admin_portrait1.setImageURI(Uri.parse(adminList.get(position).getAvatarPath())); newPosition++; } }