今天来介绍图片加载的框架Android-Universal-Image-Loader

  GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader

  也可以自行百度下载。

  首先来封装的一个类CacheTool ,由于其他加载图片的方法有点繁琐,所以这里仅封装了一个简单实用的加载方法:

 

import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.net.Uri;import android.os.Environment;import android.widget.ImageView;import java.io.File;import com.ncct.app.R;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download. ImageDownloader;/** * 图片加载框架 *  * @author jiang *  */public class CacheTool {    private static File cacheDir = Environment.getDataDirectory();    private static DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.loading_img)            .showImageForEmptyUri(R.drawable.loading_error).showImageOnFail(R.drawable.loading_error)            .cacheInMemory(true).cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565).build();    private static ImageLoaderConfiguration config;    public static void Init(Context context) {        config = new ImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(480, 800) // max                                                                                                    // width,                                                                                                    // max                                                                                                    // height,即保存的每个缓存文件的最大长宽                .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can                                                                                // slow                                                                                // ImageLoader,                                                                                // use                                                                                // it                                                                                // carefully                                                                                // (Better                                                                                // don't                                                                                // use                                                                                // it)/设置缓存的详细信息,最好不要设置这个                .threadPoolSize(3)// 线程池内加载的数量                .threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You                                                                                // can                                                                                // pass                                                                                // your                                                                                // own                                                                                // memory                                                                                // cache                                                                                // implementation/你可以通过自己的内存缓存实现                .memoryCacheSize(2 * 1024 * 1024).discCacheSize(50 * 1024 * 1024)                .discCacheFileNameGenerator(new Md5FileNameGenerator())// 将保存的时候的URI名称用MD5                                                                        // 加密                .tasksProcessingOrder(QueueProcessingType.LIFO).discCacheFileCount(100) // 缓存的文件数量                // .discCache(new UnlimitedDiscCache(cacheDir))// 自定义缓存路径                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())                .imageDownloader(new  ImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout                                                                                        // (5                                                                                        // s),                                                                                        // readTimeout                                                                                        // (30                                                                                        // s)超时时间                .writeDebugLogs() // Remove for release app                .build();// 开始构建        // Initialize ImageLoader with configuration.        ImageLoader.getInstance().init(config);    }    /**     * 加载图片并监听回调结果     *      * @param iv     * @param url     * @param mImageLoadingListener     */    public static void displayImg(ImageView iv, String url, ImageLoadingListener mImageLoadingListener) {        ImageLoader.getInstance().displayImage(url, iv, options, mImageLoadingListener);    }    /**     * 加载图片     *      * @param iv     * @param url     */    public static void displayImg(ImageView iv, String url) {        ImageLoader.getInstance().displayImage(url, iv, options);    }    /**     * 清除内存     */    public static void clearMemoryCache() {        ImageLoader.getInstance().clearMemoryCache();    }    /**     * 清除缓存     */    public static void clearDiskCache() {        ImageLoader.getInstance().clearDiscCache();    }    /**     * 得到某个图片的缓存路径     *      * @param imageUrl     * @return     */    public static String getImagePath(String imageUrl) {        return ImageLoader.getInstance().getDiscCache().get(imageUrl).getPath();    }}

 

  封装好了,里面都有详细的介绍,这里介绍下上面的中的ImageLoadingListener 接口回调,按ctrl + 鼠标左键可以进入jar包里的java文件:

/******************************************************************************* * Copyright 2011-2013 Sergey Tarasevich * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/package com.nostra13.universalimageloader.core.assist;import android.graphics.Bitmap;import android.view.View;/** * Listener for image loading process.<br /> * You can use {@  SimpleImageLoadingListener} for implementing only needed methods. * * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) * @see SimpleImageLoadingListener * @see FailReason * @since 1.0.0 */public interface ImageLoadingListener {    /**     * Is called when image loading task was started     *     * @param imageUri Loading image URI     * @param view     View for image     */    void  ingStarted(String imageUri, View view);    /**     * Is called when an error was occurred during image loading     *     * @param imageUri   Loading image URI     * @param view       View for image. Can be <b>null</b>.     * @param failReason {@ plain FailReason The reason} why image loading was failed     */    void  ingFailed(String imageUri, View view, FailReason failReason);    /**     * Is called when image is loaded successfully (and displayed in View if one was specified)     *     * @param imageUri    Loaded image URI     * @param view        View for image. Can be <b>null</b>.     * @param loadedImage Bitmap of loaded and decoded image     */    void  ingComplete(String imageUri, View view, Bitmap loadedImage);    /**     * Is called when image loading task was cancelled because View for image was reused in newer task     *     * @param imageUri Loading image URI     * @param view     View for image. Can be <b>null</b>.     */    void  ingCancelled(String imageUri, View view);}

  从以上代码中我们可以了解到接口中我们可以监听到开始、失败、完成、取消的动作。

  现在开始使用吧:

    private ImageView My_Head;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_ );        setContentView(R.layout.personcenter);        My_Head = (ImageView) findViewById(R.id.My_Head);                String Url = "http://pic.nipic.com/2007-11-09/200711912453162_2.jpg";                CacheTool.displayImg(My_Head , Url );    }     

   Mark一下,暂存一个直接通过URL获取bitmap的函数,未作内存处理。

    /**     * 获取指定路径的图片     *      * @param urlpath     * @return     * @throws Exception     */    public Bitmap getImage(String urlpath) throws Exception {        URL url = new URL(urlpath);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        conn.setRequestMethod("GET");        conn.setConnectTimeout(5000);        Bitmap bitmap = null;        InputStream inputStream = conn.getInputStream();        bitmap = BitmapFactory.decodeStream(inputStream);        return bitmap;    }

 

遗失的拂晓
收藏 打印