1. 主类-获得图片的地址
关键点:
1>.良好的代码风格:
init();
getdata();
setadapter();
2>loader = new AsyncLoader(context);
package com.example.androidtest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.json.JSONArray; import org.json.JSONObject; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; /** * 应用 * * @author tf * */ public class AscTaskActivity extends Activity { private GridView picgrid; private List<Map<String, String>> list; private HashMap<String, String> map; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_pic_list); initView(); getData(); VideoListAdapter adapter = new VideoListAdapter(this, list); picgrid.setAdapter(adapter); } private void getData() { list = new ArrayList<Map<String, String>>(); for (int i = 0; i < 10; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("pic_adress", "http://192.168.1.107:8080/MobileSafeServer/pic1.png"); list.add(map); } } private void initView() { picgrid = (GridView) findViewById(R.id.picgrid); } class VideoListAdapter extends BaseAdapter { private AsyncLoader loader; private Context context; private List<Map<String, String>> data; private LayoutInflater inflater; public VideoListAdapter(Context context, List<Map<String, String>> list) { this.context = context; this.data = list; inflater = LayoutInflater.from(context); loader = new AsyncLoader(context); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @SuppressLint("ResourceAsColor") @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (null == convertView) { convertView = inflater.inflate(R.layout.pic_grid_item, null); holder = new ViewHolder(); holder.pic_iamge_icon = (ImageView) convertView .findViewById(R.id.pic_iamge_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // holder.pic_iamge_icon.setText(data.get(position).get("pic_adress")); loader.displayImage(data.get(position).get("pic_adress"), holder.pic_iamge_icon); return convertView; } // 视图容器类,属性对应布局文件元素 private class ViewHolder { ImageView pic_iamge_icon; // TextView pic_iamge_icon; } } }
2.AsyncLoader
关键点:
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
public void displayImage(String uri, ImageView imageView) {
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
imageLoader.displayImage(uri, new ImageViewAware(imageView, false),
options);
}
package com.example.androidtest; import android.content.Context; import android.graphics.Bitmap; import android.widget.ImageView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.imageaware.ImageViewAware; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; public class AsyncLoader { private DisplayImageOptions options; private ImageLoader imageLoader; private Context context; public AsyncLoader(Context context) { super(); this.context = context; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.default_image) // 璁剧疆鍥剧墖鍦ㄤ笅杞芥湡闂存樉绀虹殑鍥剧墖 .showImageForEmptyUri(R.drawable.default_image)// 璁剧疆鍥剧墖Uri涓虹┖鎴栨槸閿欒�鐨勬椂鍊欐樉绀虹殑鍥剧墖 .showImageOnFail(R.drawable.default_image) // 璁剧疆鍥剧墖鍔犺浇/瑙g爜杩囩▼涓�敊璇�椂鍊欐樉绀虹殑鍥剧墖 .cacheInMemory(true)// 璁剧疆涓嬭浇鐨勫浘鐗囨槸鍚︾紦瀛樺湪鍐呭瓨涓? .cacheOnDisk(true)// 璁剧疆涓嬭浇鐨勫浘鐗囨槸鍚︾紦瀛樺湪SD鍗′腑 // .considerExifParams(true) //鏄�惁鑰冭檻JPEG鍥惧儚EXIF鍙傛暟锛堟棆杞�紝缈昏浆锛? // .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//璁剧疆鍥剧墖浠ュ�浣曠殑缂栫爜鏂瑰紡鏄剧ず .bitmapConfig(Bitmap.Config.RGB_565)// 璁剧疆鍥剧墖鐨勮В鐮佺被鍨?/ // .delayBeforeLoading(int delayInMillis)//int // delayInMillis涓轰綘璁剧疆鐨勪笅杞藉墠鐨勫欢杩熸椂闂? // 璁剧疆鍥剧墖鍔犲叆缂撳瓨鍓嶏紝瀵筨itmap杩涜�璁剧疆 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(false)// 璁剧疆鍥剧墖鍦ㄤ笅杞藉墠鏄�惁閲嶇疆锛屽�浣? .imageScaleType(ImageScaleType.EXACTLY) .build();// 鏋勫缓瀹屾垚 imageLoader = ImageLoader.getInstance(); // type =new PreferencesHelper(context, // Constant.PRE_SETTING_FILE).getValueInt(Constant.PRE_SETTING_IMAGE_KEY); // netWorkType =AndroidUtil.getNetWorkType(context); } public AsyncLoader(Context context, int resId) { super(); this.context = context; options = new DisplayImageOptions.Builder().showImageOnLoading(resId) // 璁剧疆鍥剧墖鍦ㄤ笅杞芥湡闂存樉绀虹殑鍥剧墖 .showImageForEmptyUri(resId)// 璁剧疆鍥剧墖Uri涓虹┖鎴栨槸閿欒�鐨勬椂鍊欐樉绀虹殑鍥剧墖 .showImageOnFail(resId) // 璁剧疆鍥剧墖鍔犺浇/瑙g爜杩囩▼涓�敊璇�椂鍊欐樉绀虹殑鍥剧墖 .cacheInMemory(true)// 璁剧疆涓嬭浇鐨勫浘鐗囨槸鍚︾紦瀛樺湪鍐呭瓨涓? .cacheOnDisk(true)// 璁剧疆涓嬭浇鐨勫浘鐗囨槸鍚︾紦瀛樺湪SD鍗′腑 // .considerExifParams(true) //鏄�惁鑰冭檻JPEG鍥惧儚EXIF鍙傛暟锛堟棆杞�紝缈昏浆锛? // .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//璁剧疆鍥剧墖浠ュ�浣曠殑缂栫爜鏂瑰紡鏄剧ず .bitmapConfig(Bitmap.Config.RGB_565)// 璁剧疆鍥剧墖鐨勮В鐮佺被鍨?/ // .delayBeforeLoading(int delayInMillis)//int // delayInMillis涓轰綘璁剧疆鐨勪笅杞藉墠鐨勫欢杩熸椂闂? // 璁剧疆鍥剧墖鍔犲叆缂撳瓨鍓嶏紝瀵筨itmap杩涜�璁剧疆 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(false)// 璁剧疆鍥剧墖鍦ㄤ笅杞藉墠鏄�惁閲嶇疆锛屽�浣? .imageScaleType(ImageScaleType.EXACTLY) .build();// 鏋勫缓瀹屾垚 imageLoader = ImageLoader.getInstance(); } public void displayImage(String uri, ImageView imageView) { imageLoader.init(ImageLoaderConfiguration.createDefault(context)); imageLoader.displayImage(uri, new ImageViewAware(imageView, false), options); } public void displayImageWithUri(String uri, ImageView imageView) { imageLoader.displayImage(uri, new ImageViewAware(imageView, false), options); } public void displayImage(String uri, ImageView imageView, ImageLoadingListener listener) { imageLoader.displayImage(uri, new ImageViewAware(imageView, false), options, listener); } public void displayImageBG(String uri, ImageView imageView) { imageLoader.displayImage(uri, new BgImageAware(imageView), options); } public void displayImageWithFile(String path, ImageView imageView) { imageLoader.displayImage("file://" + path, imageView); } /* * public void displayImageAuto(String uri, ImageView imageView) { * imageLoader * .displayImage(GlobalApplication.getInstance().getBaseUrl()+getNetTypeURi * ()+uri, new ImageViewAware(imageView,false), options, new * ImageLoadingListener() { * * @Override public void onLoadingStarted(String arg0, View arg1) { // TODO * Auto-generated method stub * * } * * @Override public void onLoadingFailed(String arg0, View arg1, FailReason * arg2) { // TODO Auto-generated method stub * * } * * @Override public void onLoadingComplete(String arg0, View view, Bitmap * loadedImage) { if(loadedImage!=null){ UIUtils.setAutoLayout(context, * view, loadedImage); } } * * @Override public void onLoadingCancelled(String arg0, View arg1) { // * TODO Auto-generated method stub * * } }); } */ }
3.BgImageAware.java
关键点:
记住要导包:image-loader.jar
和添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
package com.example.androidtest; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Looper; import android.view.View; import android.view.ViewGroup; import com.nostra13.universalimageloader.core.assist.ViewScaleType; import com.nostra13.universalimageloader.core.imageaware.ImageAware; import com.nostra13.universalimageloader.utils.L; @SuppressLint("NewApi") public class BgImageAware implements ImageAware { public static final String WARN_CANT_SET_DRAWABLE = "Can't set a drawable into view. You should call ImageLoader on UI thread for it."; public static final String WARN_CANT_SET_BITMAP = "Can't set a bitmap into view. You should call ImageLoader on UI thread for it."; protected Reference<View> viewRef; protected boolean checkActualViewSize; public BgImageAware(View view) { this(view, true); } public BgImageAware(View view, boolean checkActualViewSize) { this.viewRef = new WeakReference<View>(view); this.checkActualViewSize = checkActualViewSize; } @Override public int getWidth() { View view = viewRef.get(); if (view != null) { final ViewGroup.LayoutParams params = view.getLayoutParams(); int width = 0; if (checkActualViewSize && params != null && params.width != ViewGroup.LayoutParams.WRAP_CONTENT) { width = view.getWidth(); // Get actual image width } if (width <= 0 && params != null) width = params.width; // Get layout width parameter return width; } return 0; } @Override public int getHeight() { View view = viewRef.get(); if (view != null) { final ViewGroup.LayoutParams params = view.getLayoutParams(); int height = 0; if (checkActualViewSize && params != null && params.height != ViewGroup.LayoutParams.WRAP_CONTENT) { height = view.getHeight(); // Get actual image height } if (height <= 0 && params != null) height = params.height; // Get layout height parameter return height; } return 0; } @Override public ViewScaleType getScaleType() { return ViewScaleType.CROP; } @Override public View getWrappedView() { return viewRef.get(); } @Override public boolean isCollected() { return viewRef.get() == null; } @Override public int getId() { View view = viewRef.get(); return view == null ? super.hashCode() : view.hashCode(); } @Override public boolean setImageDrawable(Drawable drawable) { if (Looper.myLooper() == Looper.getMainLooper()) { View view = viewRef.get(); if (view != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setBackground(drawable); } else { view.setBackgroundDrawable(drawable); } return true; } } else { L.w(WARN_CANT_SET_DRAWABLE); } return false; } @Override public boolean setImageBitmap(Bitmap bitmap) { if (Looper.myLooper() == Looper.getMainLooper()) { View view = viewRef.get(); if (view != null) { Drawable drawable = bitmap == null ? null : new BitmapDrawable( view.getResources(), bitmap); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { view.setBackground(drawable); } else { view.setBackgroundDrawable(drawable); } return true; } } else { L.w(WARN_CANT_SET_BITMAP); } return false; } }