Android在加载图片时实施进度条

时间:2014-01-17 06:53:20

标签: android android-progressbar

我正在开发Android应用程序,我在我的应用程序中有一个图像滑块,现在我想当我点击我的滑块图像,图像显示在另一个活动但它需要一点时间打开,现在我想要在另一个活动中显示图像时想要实现并添加加载进度条,任何人都可以告诉我当我点击我的图像滑块时如何实现进度条,当打开另一个活动它开始进度条时,当图像显示它是dimiss?非常感谢帮助,想法和sugession,谢谢。

当我点击我的图片和其他活动时,这是我的活动:

iv_openimage = (ImageView) findViewById(R.id.iv_openimage);
iv_openimage.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(VarientDetails.this,ImageSwitcher.class);

        intent.putExtra("imageurls", imageurls);
        Log.d("CMH", "images url = " + imageurls);
        startActivity(intent);
    }
});

这是我的imageswitcher活动,我可以显示我的图像:

public class ImageSwitcher extends Activity {

ImageView iv_getimage;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.imageswitcher);

iv_getimage = (ImageView) findViewById(R.id.imageView1);
ArrayList<String> resultArray = getIntent().getStringArrayListExtra("imageurls");
Log.d("CMH imgswtchr", "images url = " + resultArray);
Picasso.with(getBaseContext()).load(resultArray.get(0))
            .into(iv_getimage);

}

}

1 个答案:

答案 0 :(得分:0)

您要做的是将资源密集型任务放在所谓的AsyncTask中。此AsyncTask在与UI线程不同的线程上运行。把它放在其中可以进行UI操作onPostExecute(); 所以你想要的是做一些事情:

start activity
set progressbar visible
start asynctask

在AsyncTask中:

execute image task that takes up time
hide progressbar

有关AsyncTask的更多信息,请访问:http://developer.android.com/reference/android/os/AsyncTask.html

此外,您当前实现不是最佳的原因是因为它都在同一个线程上运行。这使得UI线程在某个时间不可用。这是不好的做法,给用户带来了不好的体验。所以我总是建议使用AsyncTask进行这样的操作。虽然可以在任务完成之前和之后显示进度条,但任务仍然会锁定UI线程。

修改

根据要求,这是我在你的情况下所做的事情:

我首先创建一个像这样扩展AsyncTask的内部类

private class ImageLoadTask extends AsyncTask<String, Param, String>
{

    @Override
    protected String doInBackground(String... params)
    {
         //do something to retrieve the images
    }

    @Override
    protected void onPostExecute(String result)
    {
        //hide the progressbar
    }
}

然后在Activity本身启动这个AsyncTask只需执行:

progressBar.setVisibility(View.Visible);
ImageLoadTask imgTask = new ImageLoadTask();
imgTask.execute("parameter");