前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >O2-开源框架使用之Picasso

O2-开源框架使用之Picasso

作者头像
张风捷特烈
发布2018-09-29 11:25:15
4720
发布2018-09-29 11:25:15
举报

零、前言:

个人感觉Picasso还是非常好用的,它是图片加载的类库

1.依赖
代码语言:javascript
复制
implementation 'com.squareup.picasso:picasso:2.71828'
2.如果是请求网络图片:记得权限
代码语言:javascript
复制
 <uses-permission android:name="android.permission.INTERNET"/>
3.如果是SD卡图片:记得权限、及运行时处理
代码语言:javascript
复制
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

一、简单使用:

加载图片.png

1.加载网络图片资源:http://www.toly1994.com:8080/imgs/HXqqASHJETSlV**c.jpg
代码语言:javascript
复制
Picasso.get()
        .load("http://www.toly1994.com:8080/imgs/HXqqASHJETSlV**c.jpg")
        .into(mIdIdImg);

这里顺便说一句:Picasso网络加载默认是缓存到本地的:在data/data/本包/cache下

图片缓存.png

2.左上角指示器:

怎么知道图片从哪加载的呢?

代码语言:javascript
复制
 Picasso.get().setIndicatorsEnabled(true);

图片的左上角三角形颜色: 蓝色,磁盘加载---红色,网络加载---绿色,内存加载 在加载这张图片,可见是使用缓存加载的,也就是磁盘。 如果把缓存文件删掉,就是红色。别关闭在点一下加载就是绿色,也就是缓存 Picasso默认实现三级缓存,真的很棒的感觉。

加载图片2.png


3.加载res图片资源:

这个应该很熟了:

代码语言:javascript
复制
Picasso.get().setIndicatorsEnabled(true);
Picasso.get()
        .load(R.mipmap.wql)//资源文件
        .into(mIdIdImg);
4.加载assets图片资源
代码语言:javascript
复制
Picasso.get().setIndicatorsEnabled(true);
Picasso.get()
        .load("file:///android_asset/wql.jpg")//assets
        .into(mIdIdImg);
5.加载文件图片
代码语言:javascript
复制
Picasso.get().setIndicatorsEnabled(true);
Picasso.get()
        .load(new File("/data/data/com.toly1994.picassotest/cache/picasso-cache/8da4f93c94072639f4e0ea4a8b6c2df1.1"))//文件
        .into(mIdIdImg);

二、Picasso图片处理
1.重置大小:resize(W, H)

默认单位是px

代码语言:javascript
复制
Picasso.get().setIndicatorsEnabled(true);
Picasso.get()
        .load(R.mipmap.wql)//资源文件
        .resize(200,150)
        .into(mIdIdImg);

加载图片3.png

2.自定义裁切:

原型剪裁没有什么难度:搞个星星剪裁吧:更多形状,可见我的LogicCanvas库简单使用:

剪裁图片.png

设置剪裁:
代码语言:javascript
复制
Picasso.get().setIndicatorsEnabled(true);
Picasso.get()
        .load(R.mipmap.wql)//资源文件
        .transform(new StarTransformation(8,500,300))
        .into(mIdIdImg);
裁剪类:StarTransformation
代码语言:javascript
复制
/**
 * 作者:张风捷特烈<br/>
 * 时间:2018/8/30 0030:21:44<br/>
 * 邮箱:1981462002@qq.com<br/>
 * 说明:星星裁剪类
 */
public class StarTransformation implements Transformation {
    private static final int STROKE_WIDTH = 6;

    private int num;
    private float R;
    private float r;

    public StarTransformation(int num, float R, float r) {
        this.num = num;
        this.R = R;
        this.r = r;
    }


    @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 avatarPaint = new Paint();
        BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
        avatarPaint.setShader(shader);
        Paint outlinePaint = new Paint();
        outlinePaint.setColor(Color.WHITE);
        outlinePaint.setStyle(Paint.Style.STROKE);
        outlinePaint.setStrokeWidth(STROKE_WIDTH);
        outlinePaint.setAntiAlias(true);
//        float r = size / 2f;
//        canvas.drawCircle(r, r, r, avatarPaint);

        canvas.drawPath(nStarPath(num,R,r), avatarPaint);
        canvas.drawPath(nStarPath(num,R,r), outlinePaint);

        squaredBitmap.recycle();
        return bitmap;
    }


    private Path nStarPath(int num,float R,float r) {
        Path path = new Path();

        float perDeg = 360 / num;
        float degA = perDeg / 2 / 2;
        float degB = 360 / (num - 1) / 2 - degA / 2 + degA;

        path.moveTo((float) (Math.cos((degA + perDeg * 0) / 180 * Math.PI) * R + R * Math.cos(degA / 180 * Math.PI)),
                (float) (-Math.sin((degA + perDeg * 0) / 180 * Math.PI) * R + R));

        for (int i = 0; i < num; i++) {

            path.lineTo((float) (Math.cos((degA + perDeg * i) / 180 * Math.PI) * R + R * Math.cos(degA / 180 * Math.PI)),
                    (float) (-Math.sin((degA + perDeg * i) / 180 * Math.PI) * R + R));
            path.lineTo((float) (Math.cos((degB + perDeg * i) / 180 * Math.PI) * r + R * Math.cos(degA / 180 * Math.PI)),
                    (float) (-Math.sin((degB + perDeg * i) / 180 * Math.PI) * r + R));
        }
        path.close();
        return path;
    }

    @Override
    public String key() {
        return "circleTransformation()";
    }
}
3.其他配置:
代码语言:javascript
复制
.memoryPolicy(MemoryPolicy.NO_CACHE)//本地文件不缓存
.networkPolicy(NetworkPolicy.NO_CACHE)//读取网络文件不缓存
.placeholder(R.drawable.ic_launcher_background)//图片显示之前的占位图片
.error(R.mipmap.ic_launcher)//错误图片
.noFade()//不淡入淡出, 直接显示

后记、
1.声明:

1本文由张风捷特烈原创,转载请注明 2欢迎广大编程爱好者共同交流 3个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 4你的喜欢与支持将是我最大的动力

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、前言:
    • 1.依赖
      • 2.如果是请求网络图片:记得权限
        • 3.如果是SD卡图片:记得权限、及运行时处理
        • 一、简单使用:
          • 1.加载网络图片资源:http://www.toly1994.com:8080/imgs/HXqqASHJETSlV**c.jpg
            • 2.左上角指示器:
              • 3.加载res图片资源:
                • 4.加载assets图片资源
                  • 5.加载文件图片
                  • 二、Picasso图片处理
                    • 1.重置大小:resize(W, H)
                      • 2.自定义裁切:
                        • 设置剪裁:
                          • 裁剪类:StarTransformation
                            • 3.其他配置:
                            • 后记、
                              • 1.声明:
                              相关产品与服务
                              图片处理
                              图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档