1. 程式人生 > >Android開發執行緒迴圈輪播顯示

Android開發執行緒迴圈輪播顯示

需求:圖片超過兩張迴圈輪播顯示

思路:首先不能在主執行緒上寫一個死迴圈輪播對吧,執行久了有可能主執行緒會卡頓。

             新開一個子執行緒,另外你要操作介面上的東西,還需要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++;
        }

    }
     這是我專案中的程式碼,基本實現思路,具體情況再具體分析