Picasso 图片请求库(工具类)

来源:互联网 发布:建筑模型动画软件 编辑:程序博客网 时间:2024/06/17 07:20

Picasso:picasso是Square公司开源的一个Android图形缓存库,地址:http://square.github.io/picasso/

可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加载:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Picasso讲解:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0731/1639.html

下面贴出封装的工具类:

import com.example.mytoolutils.R;import com.squareup.picasso.Picasso;import com.squareup.picasso.Transformation;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.net.Uri;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;import android.widget.ImageView;/** * picasso 图片处理工具类<BR/> * 优缺点:对图片处理强大,取消已经不在视野范围的ImageView图片资源的加载(否则会导致图片错位), * 使用4.0+系统上的HTTP缓存来代替磁盘缓存;只能得到结果,不能监听图片下载过程 * <BR/> Picasso 可以与okhttp搭配 *  * 如果使用Picasso同时也使用了okhttp库,那么项目运行的时候可能会报出一下异常:    Picasso detected an unsupported OkHttp on the classpath    针对该情况,网上说需要引入:compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'    即同时引入一下三个包:    compile 'com.squareup.okhttp:okhttp:2.4.0'    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'    compile 'com.squareup.picasso:picasso:2.4.0' */public class PicassoUtils {    private static PicassoUtils instance;    /**圆形*/    public static String PICASSO_BITMAP_SHOW_CIRCLE_TYPE="PicassoUtils_Circle_Type";    /**圆角*/    public static String PICASSO_BITMAP_SHOW_ROUND_TYPE="PicassoUtils_Round_Type";    /**正常*/    public static String PICASSO_BITMAP_SHOW_NORMAL_TYPE="PicassoUtils_Normal_Type";    public static PicassoUtils getinstance(){        if(instance==null){            synchronized (PicassoUtils.class) {                if(instance==null){                    instance=new PicassoUtils();                }            }        }        return instance;    }    //Picasso使用的方法汇总:    //Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);    //Picasso.with(context).load(url).into(view);    //Picasso.with(context).load(url) .resize(50, 50).centerCrop().into(imageView)    ////这里的placeholder将resource传入通过getResource.getDrawable取资源,所以可以是张图片也可以是color id    //Picasso.with(context).load(url).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error).into(imageView);    //    // Resources, assets, files, content providers 加载图片都支持    //Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);    //Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);    //Picasso.with(context).load(new File(...)).into(imageView3);    ////这里显示notification的图片    //Picasso.with(activity).load(Data.URLS[new Random().nextInt(Data.URLS.length)]).resizeDimen(R.dimen.notification_icon_width_height,    R.dimen.notification_icon_width_height).into(remoteViews, R.id.photo, NOTIFICATION_ID, notification);    ////这里是通过设置tag标签,就是当前传过来的context,这样就可以根据这个context tag来pause和resume显示了    //Picasso.with(context).load(url).placeholder(R.drawable.placeholder).error(R.drawable.error).fit().tag(context).into(view);    ////监听onScrollStateChanged的时候调用执行    //picasso.resumeTag(context);    //picasso.pauseTag(context);    //Picasso.with(context).load(contactUri).placeholder(R.drawable.contact_picture_placeholder).tag(context).into(holder.icon);    /**     * 加载图片通过地址     * @param context     * @param path      *  <BR/>     *  String imagePath = "/mnt/sdcard/phone_pregnancy/header.png";  <BR/>        String imagefileUrl = Scheme.FILE.wrap(imagePath); <BR/>        //图片来源于Content provider         String contentprividerUrl = "content://media/external/audio/albumart/13";   <BR/>        //图片来源于assets          //  String assetsUrl = Scheme.ASSETS.wrap("image.png");  <BR/>        String assetsUrl = "assets://fail_image.9.png";  <BR/>        //图片来源于  drawable        //  String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.ic_launcher.png");<BR/>        String drawableUrl = "drawable://" + R.drawable.ic_add; <BR/>        //图片来源于  网络        String neturi = "http://ww2.sinaimg.cn/large/49aaa343jw1dgwd0qvb4pj.jpg";<BR/>        <P>     * @param imageView     * @param placeholderimage  占位图片     * @param errorimage  加载错误图片     * @param bitmapShowType   PICASSO_BITMAP_SHOW_CIRCLE_TYPE , PICASSO_BITMAP_SHOW_ROUND_TYPE ,PICASSO_BITMAP_SHOW_NORMAL_TYPE     * @param roundRadius  设置圆角半径     */    public void LoadImage(Context context,String path,ImageView imageView,int placeholderimage,int errorimage,String bitmapShowType,float roundRadius){        if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_CIRCLE_TYPE)){            Picasso.with(context).load(path).placeholder(placeholderimage).error(errorimage).transform(new CircleTransform()).into(imageView);        }else if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_ROUND_TYPE)){            Picasso.with(context).load(path).placeholder(placeholderimage).error(errorimage).transform(new RoundTransform(roundRadius)).into(imageView);        }else {            Picasso.with(context).load(path).placeholder(placeholderimage).error(errorimage).into(imageView);        }    }    /**     * 加载图片本地 通过id     * @param context     * @param localimage  R.drawable.landing_screen     * @param imageView     * @param bitmapShowType   PICASSO_BITMAP_SHOW_CIRCLE_TYPE , PICASSO_BITMAP_SHOW_ROUND_TYPE ,PICASSO_BITMAP_SHOW_NORMAL_TYPE     * @param roundRadius  设置圆角半径     */    public void LoadImage(Context context,int localimage,ImageView imageView,String bitmapShowType,float roundRadius){        if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_CIRCLE_TYPE)){            Picasso.with(context).load(localimage).placeholder(R.drawable.ic_add).error(R.drawable.ic_launcher).transform(new CircleTransform()).into(imageView);        }else if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_ROUND_TYPE)){            Picasso.with(context).load(localimage).transform(new RoundTransform(roundRadius)).into(imageView);        }else {            Picasso.with(context).load(localimage).into(imageView);        }    }    /**     * 加载图片 设置宽高  图片默认居中 (centerCrop() )     * @param context     * @param path     * @param imageView     * @param targetWidth     * @param targetHeight     * @param bitmapShowType   PICASSO_BITMAP_SHOW_CIRCLE_TYPE , PICASSO_BITMAP_SHOW_ROUND_TYPE ,PICASSO_BITMAP_SHOW_NORMAL_TYPE     * @param roundRadius  设置圆角半径     */    public void LoadImageWithWidtAndHeight(Context context,String path,ImageView imageView,int targetWidth,int targetHeight,String bitmapShowType,float roundRadius){        if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_CIRCLE_TYPE)){            Picasso.with(context).load(path).resize(targetWidth, targetHeight).centerCrop().transform(new CircleTransform()).into(imageView);        }else if(bitmapShowType.equals(PICASSO_BITMAP_SHOW_ROUND_TYPE)){            Picasso.with(context).load(path).resize(targetWidth, targetHeight).centerCrop().transform(new RoundTransform(roundRadius)).into(imageView);        }else {            Picasso.with(context).load(path).resize(targetWidth, targetHeight).centerCrop().into(imageView);        }    }    //--------------------------------------------------    /**     *设置圆形头像     */    public class CircleTransform implements Transformation {        @Override        public Bitmap transform(Bitmap source) {            int size = Math.min(source.getWidth(), source.getHeight());            int x = (source.getWidth() - size) / 2;            int y = (source.getHeight() - size) / 2;            Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);            if (squaredBitmap != source) {                source.recycle();            }            Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());            Canvas canvas = new Canvas(bitmap);            Paint paint = new Paint();            BitmapShader shader = new BitmapShader(squaredBitmap,                    BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);            paint.setShader(shader);            paint.setAntiAlias(true);            float r = size / 2f;            canvas.drawCircle(r, r, r, paint);            squaredBitmap.recycle();            return bitmap;        }        @Override        public String key() {            return "circle";        }    }    //------------------------------------------------------    /**     * 绘制圆角     */    public class RoundTransform implements Transformation{        private float radius;        public RoundTransform(float radius) {            this.radius=radius;        }        @Override        public String key() {            return "round";        }        @Override        public Bitmap transform(Bitmap bitmap) {            int size = Math.min(bitmap.getWidth(), bitmap.getHeight());            int x = (bitmap.getWidth() - size) / 2;            int y = (bitmap.getHeight() - size) / 2;            Bitmap squaredBitmap = Bitmap.createBitmap(bitmap, x, y, size, size);            if (squaredBitmap != bitmap) {                bitmap.recycle();            }            Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),                     bitmap.getHeight(), Config.ARGB_8888);             Canvas canvas = new Canvas(output);             final int color = 0xff424242;             final Paint paint = new Paint();             final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());             final RectF rectF = new RectF(rect);             paint.setAntiAlias(true);             canvas.drawARGB(0, 0, 0, 0);             paint.setColor(color);             canvas.drawRoundRect(rectF, radius, radius, paint);             paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));             canvas.drawBitmap(bitmap, rect, rect, paint);             squaredBitmap.recycle();            return output;        }    }}
0 0
原创粉丝点击