2016-08-20 16 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 –