延迟截屏

时间:2012-11-27 09:52:02

标签: android android-asynctask screenshot

我的应用程序中有一个活动,它需要多次屏幕截图并在按钮点击时转到下一个活动。我想在截取屏幕时向用户显示一些进度或状态(需要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();

            }

        }

2 个答案:

答案 0 :(得分: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();

        }
    }

答案 1 :(得分:0)

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