2017-05-03 2 views
1

je suis en train de mettre progressdialog ou progressbar alors que les images ne télécharge pas, je l'utilise déjà l'image située dans drawable dossier, je mets cette image comme l'image par défaut en images non téléchargés . comment je peux Repace image par défaut par progress comme ceci:comment afficher le chargement de progression pendant Image non téléchargé

enter image description here

JAVA:

public class Art extends Fragment { 
RecyclerView recyclerView; 
GridView myGrid; 
CategoryAdapter adapter; 

public Art() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { 
    final ArrayList<String> movieList = new ArrayList<>(); 
    movieList.add("https://myimage.com"); 
    movieList.add("https://myimage.com"); 
    View v = inflater.inflate(R.layout.fragment_art, container, false); 
    myGrid= (GridView) v.findViewById(R.id.gridViewCategory); 
    adapter =new CategoryAdapter(getActivity(),movieList); 
    myGrid.setAdapter(adapter); 
    myGrid.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        Intent popup = new Intent(getActivity(), Pop.class); 
        popup.putExtra("WallpaperURL", movieList.get(position)); 
        startActivity(popup); 
     } 
    }); 
    return v; 
    } 
} 
class CategoryAdapter extends BaseAdapter { 
    private Context context; 
    private ArrayList<String> imageId=new ArrayList<String>(); 
    CategoryAdapter(Context context,ArrayList<String> imageId){ 
    this.context=context; 
    this.imageId=imageId; 
} 
@Override 
public int getCount() { 
    return imageId.size(); 
} 

@Override 
public Object getItem(int position) { 
    return imageId.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 
class ViewHolder{ 
    ImageView CategoryImage; 
    ViewHolder(View view){ 
     CategoryImage = (ImageView) view.findViewById(R.id.cat_imageView); 
    } 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row=convertView; 
    ViewHolder holder=null; 
    if(row == null){ 
     LayoutInflater inflater= (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     row=inflater.inflate(R.layout.picture_item,parent,false); 
     holder=new ViewHolder(row); 
     row.setTag(holder); 
    } 
    else{ 
     holder=(ViewHolder) row.getTag(); 
    } 
     Glide.with(context).load(imageId.get(position)).placeholder(R.drawable.arrw).into(holder.CategoryImage); 
     return row; 
     } 
    } 
+0

Pour autant que je comprends que vous voulez réaliser des progrès pendant que votre image est en cours de téléchargement? – Umair

+0

@Umair c'est ce dont j'ai besoin! – MrMR

+0

@AliILa S'il vous plaît voir ma réponse ci-dessous – Pehlaj

Répondre

1

Il n'y a pas besoin de gonfleurs ou getView() primordial, vous êtes juste ralentissement inutilement et compliquant votre application . Il est plus simple d'utiliser la visibilité des vues.

  • créer à la fois vue et progrès ImageView dans votre mise en page et faire le ImageView parti.
  • Créez un AsyncTask qui télécharge l'image et la définit sur le ImageView et exécutez-le.
  • Sur AsyncTaskonPostExecute, désactivez la vue de progression et ImageView visible.
2

Je pense que vous voudrez peut-être comme ça

view.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE); 
//enable loading 

Glide.with(context) 
    .load(IMAGES.get(position)) 
    .error(R.drawable.matrade_logo2) 
    .placeholder(R.drawable.placeholder) 
    .listener(new RequestListener < String, GlideDrawable >() { 
     @Override 
     public boolean onException(Exception e, String model, Target <GlideDrawable> target, boolean isFirstResource) { 
      // 
      return false; 
     } 

     @Override 
     public boolean onResourceReady(GlideDrawable resource, String model, Target <GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
      // hide loading if image finished downloading 
      return false; 
     } 
    }) 
    .into(imageView); 
+0

Qu'en est-il de picture_item.xml? MrMR

1

Vous ne le faites pas droit. Si vous voulez télécharger une image, la meilleure façon est de le faire en utilisant la classe asyncTask. Essayez quelque chose comme ça, cela vous aidera à coup sûr. ou utilisez une bibliothèque comme Glide, Picasso, etc. Voici comment vous pouvez faire sans utiliser de bibliothèque.

private class DownloadFileFromURL extends AsyncTask<String, String, File> 
    { 
    String downloadedFilePath = ""; 
    String fileName = ""; 

    /** 
    * Before starting background thread 
    * Show Progress Bar Dialog 
    */ 

    DownloadFileFromURL(String fName) { 
     fileName = fName; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     onCreateDialog(progress_bar_type); 
    } 

    /** 
    * Downloading file in background thread 
    */ 
    @SuppressWarnings("ResultOfMethodCallIgnored") 
    @Override 
    protected File doInBackground(String... f_url) { 
     int count = 0; 
     File convertedFile = null; 
     try { 
      URL url = new URL(f_url[0]); 

      URLConnection connection = url.openConnection(); 
      connection.setDoOutput(true); 
      connection.connect(); 
      // getting file length 
      // getting file length 
      int lenghtOfFile = connection.getContentLength(); 
      String contentType = connection.getContentType(); 


      // input stream to read file - with 8k buffer 
      InputStream input = new BufferedInputStream(url.openStream(), 8192); 

      // Output stream to write file 
      downloadedFilePath = getActivity().getFilesDir().getAbsolutePath() + "/" + fileName; 
      OutputStream output = new FileOutputStream(downloadedFilePath); 

      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       // publishing the progress.... 
       // After this onProgressUpdate will be called 
       publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 

       // writing data to file 
       output.write(data, 0, count); 
      } 

      // flushing output 
      output.flush(); 

      // closing streams 
      output.close(); 
      input.close(); 

     return null; 
    } 

    /** 
    * Updating progress bar 
    */ 
    protected void onProgressUpdate(String... progress) { 
     // setting progress percentage 
     progressDialogForDownload.setProgress(Integer.parseInt(progress[0])); 
    } 

    /** 
    * After completing background task 
    * Dismiss the progress dialog 
    **/ 

    @Override 
    protected void onPostExecute(File file_url) { 
     // dismiss the dialog after the file was downloaded 
     if (progressDialogForDownload != null && progressDialogForDownload.isShowing()) { 
      progressDialogForDownload.dismiss(); 
      progressDialogForDownload = null; 
     } 

     openFileWithIntent(this.downloadedFilePath); 
    } 

} 

et dans cette méthode openFileWithIntent(this.downloadedFilePath); vous pouvez passer le chemin téléchargé de l'image où vous voulez le montrer. J'espère que cela aide.

1

Essayez

showLoader(); //show loader or progress here 
Glide 
    .with(context) // could be an issue! 
    .load(url) 
    .asBitmap() 
    .into(new SimpleTarget<Bitmap>() { 
      @Override 
      public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation){ 
       //hide loader or progress here 
       imageView1.setImageBitmap(bitmap); 
      } 
     }); 
}