показывает прогрессбар, пока изображение не загрузится с сервера

1

Уважаемый, я могу показывать изображение из URL-адресов, означает, что URL-адреса хранятся в массиве, и у меня есть две кнопки "Следующий", "Назад" для просмотра изображения один за другим, когда я нажимаю на изображение кнопки, загружаются с сервера как ответ теперь я хочу показать индикатор выполнения, когда изображение идет вниз по серверу, и когда ответ приходит, тогда индикатор прогресса скрывает автоматически menas show progreebar до тех пор, пока ответ не будет отображаться на экране, а когда закончится действие progreebar изображения... так, как это сделать мой кусок кода для показа изображения один за другим при нажатии кнопки ниже... пожалуйста, измените в моем коде, если возможно bcoz, я новичок в android и java, а... намного больше...

public class artspacedetailShowingNow extends Activity implements OnClickListener {
private int imageCounter = 0;
private ImageView imageLoader;
private String[] imageList = {"http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/martin_di_girolamo._diosas/198915-1-esl-AR/MARTIN_DI_GIROLAMO._Diosas.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/jorge_macchi._la_espera/198929-1-esl-AR/JORGE_MACCHI._La_espera.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/leon_ferrari._hongo_nuclear/198950-1-esl-AR/LEON_FERRARI._Hongo_Nuclear.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/martin_sastre._fiebre/198922-1-esl-AR/MARTIN_SASTRE._Fiebre.jpg"};
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showingnow);
       imageLoader = (ImageView) findViewById(R.id.imageLoader);
     Button next = (Button) findViewById(R.id.next);
    Button back = (Button) findViewById(R.id.back);
    next.setOnClickListener(this);
    back.setOnClickListener(this);
    back.setEnabled(false);
    this.loadImage(imageList[imageCounter]);

}
@Override
 public void onClick(View v)
{
String imagePath = null;
  switch (v.getId())
{
case R.id.next:
    Log.i("Tag","tag");
    if(imageCounter < imageList.length)
    {
        imageCounter++;
        imagePath = imageList[imageCounter];
        if (imageCounter==(imageList.length)-1)
        {
            { 
                Button next=(Button)findViewById(R.id.next); 
               next.setEnabled(false); 
             }
        }
        else
        {
            Button back=(Button)findViewById(R.id.back); 
            back.setEnabled(true); 

        }
    }
    break;
case R.id.back:
    if(imageCounter > 0)
    {
        imageCounter--;
        imagePath = imageList[imageCounter];
        if (imageCounter==0) 
        { 
            Button back=(Button)findViewById(R.id.back); 
            back.setEnabled(false); 

        }
        else
        {
            Button next=(Button)findViewById(R.id.next); 
             next.setEnabled(true);

        }
    }
    break;
}
this.loadImage(imagePath);
}
private void loadImage(String imagePath)
{   
  try {
      URL aURL = new URL(imagePath);
      URLConnection conn = aURL.openConnection();
      conn.connect();
      InputStream is = conn.getInputStream();
      BufferedInputStream bis = new BufferedInputStream(is);
     Bitmap bm = BitmapFactory.decodeStream(bis);

      imageLoader.setImageBitmap(bm);
      imageLoader.setImageBitmap(bm);
  } 

}
Теги:
progress-bar

4 ответа

3
Лучший ответ

проверьте это.

public class artspacedetailShowingNow extends Activity implements OnClickListener {
private int imageCounter = 0;
private ImageView imageLoader;
private ProgressDialog bar;
private String[] imageList = {"http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/martin_di_girolamo._diosas/198915-1-esl-AR/MARTIN_DI_GIROLAMO._Diosas.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/jorge_macchi._la_espera/198929-1-esl-AR/JORGE_MACCHI._La_espera.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/leon_ferrari._hongo_nuclear/198950-1-esl-AR/LEON_FERRARI._Hongo_Nuclear.jpg","http://www.artealdiaonline.com/var/artealdia_com/storage/images/argentina/directorio/galerias/ruth_benzacar/artistas/martin_sastre._fiebre/198922-1-esl-AR/MARTIN_SASTRE._Fiebre.jpg"};
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showingnow);
       imageLoader = (ImageView) findViewById(R.id.imageLoader);
     Button next = (Button) findViewById(R.id.next);
    Button back = (Button) findViewById(R.id.back);
    next.setOnClickListener(this);
    back.setOnClickListener(this);
    back.setEnabled(false);
    new ImageDownload().execute(imageList[imageCounter]); 
    //this.loadImage(imageList[imageCounter]);

}
@Override
 public void onClick(View v)
{
String imagePath = null;
  switch (v.getId())
{
case R.id.next:
    Log.i("Tag","tag");
    if(imageCounter < imageList.length)
    {
        imageCounter++;
        imagePath = imageList[imageCounter];
        if (imageCounter==(imageList.length)-1)
        {
            { 
                Button next=(Button)findViewById(R.id.next); 
               next.setEnabled(false); 
             }
        }
        else
        {
            Button back=(Button)findViewById(R.id.back); 
            back.setEnabled(true); 

        }
    }
    break;
case R.id.back:
    if(imageCounter > 0)
    {
        imageCounter--;
        imagePath = imageList[imageCounter];
        if (imageCounter==0) 
        { 
            Button back=(Button)findViewById(R.id.back); 
            back.setEnabled(false); 

        }
        else
        {
            Button next=(Button)findViewById(R.id.next); 
             next.setEnabled(true);

        }
    }
    break;
}
 new ImageDownload().execute(imagePath);
//this.loadImage(imagePath);
}
private void loadImage(String imagePath)
{   
  try {
      URL aURL = new URL(imagePath);
      URLConnection conn = aURL.openConnection();
      conn.connect();
      InputStream is = conn.getInputStream();
      BufferedInputStream bis = new BufferedInputStream(is);
     Bitmap bm = BitmapFactory.decodeStream(bis);

      imageLoader.setImageBitmap(bm);
      imageLoader.setImageBitmap(bm);
  }

private class ImageDownload extends AsyncTask<String , Void, Void>(){

                        @Override
                        protected Void doInBackground(String... params) {
                            loadImage(params[0]);
                            return null;
                        }
                        @Override
                        protected void onPostExecute(Void result) {

                            bar.dismiss();
                            super.onPostExecute(result);
                        }
                        @Override
                        protected void onPreExecute() {
                            bar = new ProgressDialog(activity);
                            bar.setMessage("Processing...");
                            bar.setIndeterminate(true);
                            super.onPreExecute();
                        }

                    }
}
0

для отображения индикатора прогресса до загрузки изображения. Попробуйте использовать метод asyncTask.

здесь пример кода для него.

private class ImageDownload extends AsyncTask<String , Void, Void>(){

                        @Override
                        protected Void doInBackground(String... params) {
                            loadImage(params[0]);
                            return null;
                        }
                        @Override
                        protected void onPostExecute(Void result) {

                            bar.dismiss();
                            super.onPostExecute(result);
                        }
                        @Override
                        protected void onPreExecute() {
                            bar = new ProgressDialog(activity);
                            bar.setMessage("Processing...");
                            bar.setIndeterminate(true);
                            super.onPreExecute();
                        }

                    }

создать локальную переменную ProgressBar; замените эту строку new ImageDownload().execute(imageURL); вместо loadImage(imageURL);

для получения дополнительной информации о asyncTask, затем перейдите сюда.

  • 0
    Уважаемые, можете ли вы PLS, пожалуйста, вставьте ваш код потока в мой код, потому что я новичок в Android PLS, я буду очень благодарен вам ... PLS ...
  • 0
    см. мой отредактированный ответ и замените это "new ImageDownload (). execute (imageURL);" вместо того, чтобы вызывать метод loadImage ()
Показать ещё 1 комментарий
0

Проверить, когда изображение загружается с сервера, размещать ImageView и progressdialog в одном месте, Первый набор progressdialog visibile → true и visview → false. затем начните загрузку изображения с сервера, используйте обработчик и узнайте, когда изображение доступно с сервера. и это время задает прогрессдиалоговой видимости → false и видимость видимого изображения → true

0

Используйте концепцию Handler в своем коде для этого.

вот код.

ProgressDialog _progressDialog = ProgressDialog.show(this,"Saving Data","Please wait......");
settintAdater();

 private void settingAdater(){

        Thread _thread = new Thread(){

            public void run() {

                Message _msg = new Message();
                _msg.what = 1; 
                 // Do your task where you want to rerieve data to set in adapet
                YourCalss.this._handle.sendMessage(_msg);
            };
        };
        _thread.start();
    }
 Handler _handle = new Handler(){

        public void handleMessage(Message msg) {

            switch(msg.what){

                case 1:
                    _progressDialog.dismiss();
                     listview.setAdapter();
            }
        }
 }
  • 0
    это тоже хороший трюк .. я тоже попробую это .. спасибо за ответ ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню