zoukankan      html  css  js  c++  java
  • 使用image-loader异步加载图片

    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;
    	}
    }
    
  • 相关阅读:
    JSON.parse()和JSON.stringify()
    php结合layui实现前台加后台操作
    微信拨打电话功能
    视觉差效果
    前端开发面试题
    字符串分割--java中String.split()用法
    vue.js实现购物车功能
    localStorage使用总结
    canvas 实现赛车小游戏
    canvas 实现飞碟射击游戏
  • 原文地址:https://www.cnblogs.com/childhooding/p/4461510.html
Copyright © 2011-2022 走看看