Charles Galvez
Charles Galvez

Reputation: 1110

Universal Image Loader(Too Slow)

I have about 200+ images in my gallery.
I'm able to get that images using Universal Image Loader.
But when loading all images to my app, it's so slow.
Unlike in my regular gallery.
My phone is Samsung Galaxy s5(Lollipop).
Here's the Code.

package com.thesis.juandirection.juandirectionfinale.fragments;

/**
 * Created by Galvez on 11/5/2015.
 */

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import java.util.ArrayList;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.thesis.juandirection.juandirectionfinale.Holder.GlobalVar;
import com.thesis.juandirection.juandirectionfinale.R;
import com.thesis.juandirection.juandirectionfinale.Constants;
public class ImageGridFragment extends AbsListViewBaseFragment {

    public static final int INDEX = 1;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fr_image_grid, container, false);


        listView = (GridView) rootView.findViewById(R.id.grid);
        ((GridView) listView).setAdapter(new ImageAdapter(getActivity()));
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                startImagePagerActivity(position);
            }
        });
        return rootView;
    }

    private static class ImageAdapter extends BaseAdapter {
        ArrayList<String> IMAGE_URLS = new ArrayList<>();
        private LayoutInflater inflater;
        private DisplayImageOptions options;
        ImageAdapter(Context context) {
            inflater = LayoutInflater.from(context);
            options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.abc_ab_share_pack_mtrl_alpha)
                    //.showImageForEmptyUri(R.drawable.abc_ab_share_pack_mtrl_alpha)
                    //.showImageOnFail(R.drawable.abc_ab_share_pack_mtrl_alpha)
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .considerExifParams(true)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .build();
        }

        @Override
        public int getCount() {
            return Constants.IMAGES.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            IMAGE_URLS = (ArrayList<String>) Constants.IMAGES.clone();
            final ViewHolder holder;
            View view = convertView;
            if (view == null) {
                view = inflater.inflate(R.layout.item_grid_image, parent, false);
                holder = new ViewHolder();

                assert view != null;
                holder.imageView = (ImageView) view.findViewById(R.id.image);
                holder.imageView.setId(position);
                holder.checkBox = (CheckBox) view.findViewById(R.id.cbImage);

                holder.progressBar = (ProgressBar) view.findViewById(R.id.progress);
                view.setTag(holder);

                if (GlobalVar.getPosition.size() > 0) {
                    Constants.IMAGES_SELECTED.clear();
                     for (int x = 0; x < GlobalVar.getPosition.size(); x++) {
                        if (position == GlobalVar.getPosition.get(x)) {
                            holder.checkBox.setChecked(true);
                       }
                    }
                }

             holder.imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!holder.checkBox.isChecked()) {
                            holder.checkBox.setChecked(true);
                            GlobalVar.getPosition.add(position);
                        } else {
                            GlobalVar.getPosition.remove(GlobalVar.getPosition.indexOf(position));
                            holder.checkBox.setChecked(false);
                        }
                    }
                });
            } else {
                holder = (ViewHolder) view.getTag();
            }

            ImageLoader.getInstance()
                    .displayImage(IMAGE_URLS.get(position), holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {
                            holder.progressBar.setProgress(0);
                            holder.progressBar.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                            holder.progressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            holder.progressBar.setVisibility(View.GONE);
                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {
                            holder.progressBar.setProgress(Math.round(100.0f * current / total));
                        }
                    });

            return view;
        }
    }

    static class ViewHolder {
        ImageView imageView;
        CheckBox checkBox;
        ProgressBar progressBar;
    }
}

Sometimes it crashes the app just loading the images.

Upvotes: 3

Views: 549

Answers (0)

Related Questions