前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Picasso实现圆形图片和圆角图片

Android Picasso实现圆形图片和圆角图片

作者头像
程序员飞飞
发布2020-02-27 16:22:23
1.9K0
发布2020-02-27 16:22:23
举报
文章被收录于专栏:Android&Java技术Android&Java技术

Android Picasso实现圆形图片和圆角图片

1.实现圆形图片

1.1代码调用如下

代码语言:javascript
复制
Picasso.with(mContext).load(headpic).memoryPolicy(MemoryPolicy.NO_CACHE)
                           .transform(new CircleTransform(mContext)).into(ivIcon);

1.2自定义圆形图片处理工具类(可以修改圆形图片的半径)

代码语言:javascript
复制
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;

import com.squareup.picasso.Transformation;

/**
 * Created by xpf on 2017/4/8 :)
 * Function:Picasso Transformation 实现圆形图片
 */

public class CircleTransform implements Transformation {

    private Context mContext;
    private int radius; // 圆形图片半径

    public CircleTransform(Context context) {
        mContext = context;
        radius = DensityUtil.dp2px(mContext, 10);
    }

    @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;
//        float r = radius;
        canvas.drawCircle(r, r, r, paint);

        squaredBitmap.recycle();
        return bitmap;
    }

    @Override
    public String key() {
        return "circle";
    }

}

2.实现圆角图片

2.1代码调用如下

代码语言:javascript
复制
Picasso.with(mContext).load(headpic).memoryPolicy(MemoryPolicy.NO_CACHE)
                           .transform(new RoundTransform(mContext)).into(ivIcon);

2.2自定义圆角图片处理工具类(可以修改图片圆角的半径)

代码语言:javascript
复制
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;

import com.squareup.picasso.Transformation;

/**
 * Created by xpf on 2017/4/8 :)
 * Function:Picasso Transformation 实现圆角图片
 */

public class RoundTransform implements Transformation {

    private Context mContext;

    public RoundTransform(Context context) {
        mContext = context;
    }

    @Override
    public Bitmap transform(Bitmap source) {

        int widthLight = source.getWidth();
        int heightLight = source.getHeight();
        int radius = DensityUtil.dp2px(mContext, 8); // 圆角半径

        Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(output);
        Paint paintColor = new Paint();
        paintColor.setFlags(Paint.ANTI_ALIAS_FLAG);

        RectF rectF = new RectF(new Rect(0, 0, widthLight, heightLight));

        canvas.drawRoundRect(rectF, radius, radius, paintColor);
//        canvas.drawRoundRect(rectF, widthLight / 5, heightLight / 5, paintColor);

        Paint paintImage = new Paint();
        paintImage.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
        canvas.drawBitmap(source, 0, 0, paintImage);
        source.recycle();
        return output;
    }

    @Override
    public String key() {
        return "roundcorner";
    }

}

今天就到这里吧…

下篇预告:Android Glide实现圆形图片和圆角图片

敬请期待…

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android Picasso实现圆形图片和圆角图片
    • 1.实现圆形图片
      • 1.1代码调用如下
      • 1.2自定义圆形图片处理工具类(可以修改圆形图片的半径)
    • 2.实现圆角图片
      • 2.1代码调用如下
      • 2.2自定义圆角图片处理工具类(可以修改图片圆角的半径)
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档