• 使用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;
    	}
    }
    
  • 相关阅读:
    thinkphp5 tp5 命名空间 报错 Namespace declaration statement has to be the very first statement in the script
    开启 php 错误 提示 php-fpm 重启 nginx 500错误 解决办法 wdlinux lnmp 一键包 php脚本无法解析执行
    js 设置 cookie 定时 弹出层 提示层 下次访问 不再显示 弹窗 getCookie setCookie setTimeout
    php 二维数组 转字符串 implode 方便 mysql in 查询
    nginx 重启 ps -ef|grep nginx kill -HUP 主进程号
    jquery bootstrap help-block input 表单 提示 帮助 信息
    jquery 倒计时 60秒 短信 验证码 js ajax 获取
    jQuery如何获取同一个类标签的所有的值 遍历
    linux下C语言文件操作相关函数
    gcc,gdb用法
  • 原文地址:https://www.cnblogs.com/childhooding/p/4461510.html
Copyright © 2020-2023  润新知