package com.applite.androiduniversalimageloaderdemo; import java.util.Collections; import java.util.LinkedList; import java.util.List; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.applite.androiduniversalimageloaderdemo.Constants.Extra; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; public class ImageListActivity extends AbsListViewBaseActivity { DisplayImageOptions options; //配置图片加载及显示选项 String[] imageUrls; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_image_list); //获取url数组 Bundle bundle = getIntent().getExtras(); imageUrls = bundle.getStringArray(Extra.IMAGES); //配置图片加载及显示选项(还有一些其他的配置,查阅doc文档吧) options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_stub) //在ImageView加载过程中显示图片 .showImageForEmptyUri(R.drawable.ic_empty) //image连接地址为空时 .showImageOnFail(R.drawable.ic_error) //image加载失败 .cacheInMemory(true) //加载图片时会在内存中加载缓存 .cacheOnDisc(true) //加载图片时会在磁盘中加载缓存 .displayer(new RoundedBitmapDisplayer(20)) //设置用户加载图片task(这里是圆角图片显示) .build(); listView = (ListView) findViewById(android.R.id.list); //绑定适配器 listView.setAdapter(new ItemAdapter()); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { startImagePagerActivity(position); } }); } @Override public void onBackPressed() { AnimateFirstDisplayListener.displayedImages.clear(); super.onBackPressed(); } private void startImagePagerActivity(int position) { Intent intent = new Intent(this, ImagePagerActivity.class); intent.putExtra(Extra.IMAGES, imageUrls); intent.putExtra(Extra.IMAGE_POSITION, position); startActivity(intent); } /**自定义图片适配器**/ class ItemAdapter extends BaseAdapter { private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); private class ViewHolder { public TextView text; public ImageView image; } @Override public int getCount() { return imageUrls.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; final ViewHolder holder; if (convertView == null) { view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false); holder = new ViewHolder(); holder.text = (TextView) view.findViewById(R.id.text); holder.image = (ImageView) view.findViewById(R.id.image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.text.setText("Item " + (position + 1)); //Adds display image task to execution pool. Image will be set to ImageView when it's turn. imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener); return view; } } /**图片加载监听事件**/ private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; boolean firstDisplay = !displayedImages.contains(imageUri); if (firstDisplay) { FadeInBitmapDisplayer.animate(imageView, 500); //设置image隐藏动画500ms displayedImages.add(imageUri); //将图片uri添加到集合中 } } } } }