2016-08-20 17 views
0

我想顯示一個異步任務的前五秒圖像,然後顯示進度對話框。在框架佈局中顯示imageview背後的進度對話框

是否可以在前5秒後在圖像視圖後顯示進度對話框,然後隱藏該圖像視圖並顯示進度對話框?

+1

您可以定位的ImageView和進度對話框另一層之上並使其可見匆匆按你的條件。關於5秒的情況,你可以發佈一個可運行的延遲5秒後執行,使其消失並使進度條可見。 –

+0

好吧,但問題是如果異步任務在5秒之前完成,那麼我們關閉onpostexecute()的進度對話框。然後改變進度對話框的可見性會產生錯誤 –

+1

然後我認爲你需要有一個計時器任務延遲5秒後運行。因此,如果異步任務在5秒之前完成,那麼您可以取消/清除計時器任務 –

回答

1

通過應用Rajen Raiyarela的建議下,我做了這個:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_act1); 

    pb = (ProgressBar) findViewById(R.id.pb); 
    iv = (ImageView) findViewById(R.id.iv); 
    TimerTask task = new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        swapVisibility(); 
       } 
      }); 
     } 
    }; 
    timer = new Timer(); 
    timer.schedule(task, 5000); 

    new Task().execute(); 
} 

class Task extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... voids) { 
     try { 
      Thread.sleep(7000); // imitating heavy operation 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     timer.cancel(); 
     if (pb.getVisibility() != View.VISIBLE) 
      swapVisibility(); 
    } 
} 

private void swapVisibility() { 
    pb.setVisibility(View.VISIBLE); 
    iv.setVisibility(View.GONE); 
    Log.e("TAG", "Visibility changed"); 
} 
+0

我不想睡覺函數doInBackground –