picasso 图片缓存库介绍

picasso  毕加索 是sequre公司开源的一个图片缓存库,(sequre公司是一个技术很nb的公司 开源项目有retrofit okhttp等众多优秀开源项目) 毕加索github地址

1:可以实现图片下载和缓存功能

2:picasso 已经解决了adapter中错位问题

3:复杂的图片进行压缩,尽量减少内存的消耗

4:实现内存缓存和二级硬盘缓存的效果


picasso 框架解决下载中遇到的问题:

1:在adapter中回收和取消当前下载

2: 使用最少的内存完成图片的转换

3: 自动内存和硬盘缓存

4:图形转换,比如大小,旋转

5:加载网络资源和本地资源


依赖:

compile 'com.squareup.picasso:picasso:2.5.2'

代码混淆:   -dontwarn com.squareup.okhttp.**


使用教程网址  http://square.github.io/picasso/

 

加载图片的方式很多 可以是网络可以是本地

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);


例子1:加载网络图片:

package com.example.pic_picasso;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity {

    ImageView imageView;
    public String imgUrl="http://img2.ph.126.net/-JWI_lNvXoHo4fxVDLADBg==/6597137936377058906.jpg";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView= (ImageView) findViewById(R.id.imgview);
    }

    public void onLoadImage(View view)
    {
       // Picasso.with(view.getContext()).load(imgUrl).into(imageView);
        Picasso.with(view.getContext()).load(imgUrl).into(imageView, new Callback() {
            @Override
            public void onSuccess() {
                Log.d("------","加载成功");
            }

            @Override
            public void onError() {
                Log.d("------","加载失败");
            }
        });

    }
}




例子2:毕加索 在adapter中的加载和取消 这里选择recyclerView

package com.example.pic_picasso;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by asange on 16/6/5.
 */
public class LoadInRecyclerViewActivity extends AppCompatActivity {

    RecyclerView   rcyclerView;
    MyAdapter adapter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recyclerview);
        rcyclerView= (RecyclerView) findViewById(R.id.rcyclerView);
        rcyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter=new MyAdapter();
        rcyclerView.setAdapter(adapter);
        List<String> urls=new ArrayList<>();
        for(int i=0;i<30;i++)
        {
            urls.add("http://m.weather.com.cn/img/b"+i+".gif");
        }
        adapter.bindData(true,urls);
    }

    class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myholder>
    {
        private final List<String> urls=new ArrayList<>();

        public void bindData(boolean isRefresh,List<String> datas)
        {
            if(isRefresh)
                urls.clear();
            urls.addAll(datas);
            notifyDataSetChanged();
        }
        @Override
        public Myholder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new Myholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview,parent,false));
        }

        @Override
        public void onBindViewHolder(Myholder holder, int position) {
            Picasso.with(holder.imageView.getContext()).load(urls.get(position)).into(holder.imageView);
            holder.textView.setText("pos:"+position);
        }

        @Override
        public void onViewRecycled(Myholder holder) {
            super.onViewRecycled(holder);
            //取消
            Picasso.with(holder.imageView.getContext()).cancelRequest(holder.imageView);
        }

        @Override
        public int getItemCount() {
            return urls.size();
        }

        public class Myholder extends RecyclerView.ViewHolder
        {
            public ImageView imageView;
            public TextView textView;
            public Myholder(View itemView) {
                super(itemView);
                imageView= (ImageView) itemView.findViewById(R.id.icon);
                textView= (TextView) itemView.findViewById(R.id.title);
            }
        }

    }

}



例子3:裁剪图片(可自定义宽度和高度)

 public void onLoadImageResize(View v)
    {
        String url="http://www.77mv.com/uploads/allimg/c151025/1445M15H2P40-12224.jpg";
        Picasso.with(v.getContext()).load(url).resize(100,100).into(imageView);
    }


原图:


裁剪效果图:



居中裁剪

 public void onLoadImageResize(View v)
    {
        String url="http://www.77mv.com/uploads/allimg/c151025/1445M15H2P40-12224.jpg";
        Picasso.with(v.getContext()).load(url).resize(100,100).centerCrop().into(imageView);
    }

运行效果:

例4: 占位符 (图片加载成功之前显示的图片 加载失败显示的图片)

加载前的图片 如果加载失败 不替换 加载成功才替换

public void onLoadImagePlaceholder(View v)
    {
        String url="null";//注定加载失败
        Picasso.with(v.getContext()).load(url).placeholder(R.mipmap.ic_launcher).fit().into(imageView);
    }



加载前的图片 加载成功替换成功图片 加载失败替换失败的图片

 public void onLoadImagePlaceholder(View v)
    {
        String url="null";//注定加载失败
        //Picasso.with(v.getContext()).load(url).placeholder(R.mipmap.ic_launcher).fit().into(imageView);
        Picasso.with(v.getContext()).load(url).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_error).fit().into(imageView);
    }


例5:对图片的自定义裁剪

  public void onLoadImageMyCut(View view){
        String url="http://www.77mv.com/uploads/allimg/c151025/1445M15H2P40-12224.jpg";
        Picasso.with(view.getContext()).load(url).transform(new MyTrans(url)).into(imageView);
    }
    class MyTrans implements Transformation
    {
        public String key;
        public MyTrans(String key)
        {
            this.key=key;
        }
        @Override
        public Bitmap transform(Bitmap source) {
            //1/2 裁剪
            int size = Math.min(source.getWidth(), source.getHeight());
            int x = (source.getWidth() - size) / 2;
            int y = (source.getHeight() - size) / 2;
            Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
            if (result != source) {
                source.recycle();
            }
            return result;
        }

        @Override
        public String key() {//唯一的key
            return key;
        }
    }


正方形图片:

 class MyTrans implements Transformation
    {
        public String key;
        public MyTrans(String key)
        {
            this.key=key;
        }
        @Override
        public Bitmap transform(Bitmap source) {
            int sequre = Math.min(source.getWidth(), source.getHeight());
            Bitmap resultSequre = Bitmap.createBitmap(source, sequre, sequre, source.getWidth(),source.getHeight());
            if (resultSequre != source) {
                source.recycle();
            }
            return resultSequre;
        }

        @Override
        public String key() {//唯一的key
            return key;
        }
    }



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亚洲小炫风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值