2012-11-27 83 views
0

我在我的应用程序中有一个活动,它需要几个屏幕捕获并移动到下一个按钮单击活动。我想在截图时向用户展示一些进度或状态(需要5-8秒)。我尝试使用AsyncTaskrunOnUithread()。但没有运气。即使我在doInBackground()中编写了整个代码,我也不知道为什么ProgressDialog在获取所有屏幕截图后启动。有什么更好的方法来做到这一点?这里是我的代码:延迟截图

public class TakeScreenShots extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog dialog; 


      @Override 
      protected void onPreExecute() { 
       this.dialog = ProgressDialog.show(MyActivity.this, "MyTitle", 
         "Loading .....", true); 

      } 

      @Override 
      protected Void doInBackground(Void... params) { 
       MyActivity.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         takeScreenshots(); 

        } 
       }); 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Void unused) { 
       gotoNextActivity(); 

       this.dialog.dismiss(); 

      } 

     } 
+0

如果你实现了asynctask,它应该显示进度对话框,并在完成后移动到下一个活动。 – Raghunandan

+0

是的。但它不是那样做的。在调用takeScreenShots()方法后出现进度对话框。 –

+0

你在NExt屏幕上做什么? – Sameer

回答

0

我从一个答案的答案在this question。我在图像视图中设置了一个drawable。所以,我在Ui Thread上保留了该行,并保留在doInBackground()中。

+0

这我已经在我的评论中提到*见我已经给出一个例子,如果你想改变UI在'preExecute()'* –

1

不,你做错了,在runOnUiThread代替捕获直接捕获它在doInBackground()

这里是工作示例

public class backImageProcess extends AsyncTask<Void, Void, Void> 
    { 
private ProgressDialog dialog; 
     @Override 
     protected void onPreExecute() { 

      this.dialog = ProgressDialog.show(MyActivity.this, "MyTitle", 
         "Loading .....", true); 

      try { 
       File mFile= new File(mTempImagename); 
       if(mFile!=null) 
        mFile.delete(); 
      } catch (Exception e) { 
      } 

      super.onPreExecute(); 
     } 
     @Override 
     protected Void doInBackground(Void... params) { 
      mLayoutRoot.setDrawingCacheEnabled(true); 
      mLayoutRoot.buildDrawingCache(); 

      Bitmap mBitmap= mLayoutRoot.getDrawingCache(); 
      try { 
       if(mBitmap!=null) 
       { 
        FileOutputStream out = new FileOutputStream(mTempImagename); 
        mBitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
        out.flush(); 
        out.close(); 
       } 
      } catch (Exception e) { } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if(this.dialog!=null) 
       this.dialog.dismiss(); 

      gotoNextActivity(); 

     } 
    } 
+0

但我的代码实际上有一个需要很多截图的for循环。我的意思是一个ImageView的Drawable被改变并且截图被拍摄。可能会有10到15个截图。 –

+0

我试着让我的代码保留在doInBackground中,就像你做一次捕获一样。它不起作用 –

+0

它引发这个异常:android.view.ViewRoot $ CalledFromWrongThreadException –