Reputation: 1110
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