【 Android 】圆形图片

作者: Tyhoo_Wu | 来源:发表于2017-10-01 15:25 被阅读108次

    目前市面上主流的图片加载第三方库:

    现在越来越多的大型项目都在使用 Glide 或者 Picasso 加载图片,而且 Google 提供的 Demo 也会使用到 Glide 。这么强大的图片加载库也一定会实现圆形图片。

    示例图:

    CircleBitmap.png

    本文将介绍如何使用 Glide 和 Picasso 实现圆形图片

    代码示例:

    1. 导入必要的库
    // Glide
    compile 'com.github.bumptech.glide:glide:3.8.0'
    
    // Picasso
    compile 'com.squareup.picasso:picasso:2.5.2'
    
    1. 使用 Glide 加载网络图片(布局文件就不贴了,就是一个 ImageView)
    <uses-permission android:name="android.permission.INTERNET" />
    
    private ImageView mImgGlide;
    
    private void initViews() {
    
        mImgGlide = (ImageView) findViewById(R.id.img_glide);
        
        // 使用 Glide 设置圆形画像
        Glide.with(MainActivity.this)
                .load(mImgUrl)
                .asBitmap()
                .centerCrop()
                .into(new BitmapImageViewTarget(mImgGlide) {
                    @Override
                    protected void setResource(Bitmap resource) {
                        super.setResource(resource);
                        RoundedBitmapDrawable roundedBitmapDrawable =
                                RoundedBitmapDrawableFactory.create(getResources(), resource);
                        roundedBitmapDrawable.setCircular(true);
                        mImgGlide.setImageDrawable(roundedBitmapDrawable);
                    }
                });
    }
    
    1. 使用 Picasso 加载网络图片(布局文件就不贴了,就是一个 ImageView)
      Picasso 本身并没有提供圆形图片的实现方法,但是我们可以写一个工具类来实现。
    public class PicassoUtil {
    
        /**
         * 转换成圆形画像
         */
        public static 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";
            }
        }
    }
    
    private ImageView mImgPicasso;
    
    private void initViews() {
    
        mImgPicasso = (ImageView) findViewById(R.id.img_picasso);
        
        // 使用 Picasso 设置圆形画像
        Picasso.with(MainActivity.this)
                .load(mImgUrl)
                .transform(new PicassoUtil.CircleTransform())
                .into(mImgPicasso);
    }
    

    相关文章

      网友评论

      • 8b5dec43c39f:不错,挺好用得
        8b5dec43c39f:呃呃,这么复杂的
        Tyhoo_Wu:@王虚的闪光 对于 Glide 4.x 的版本,需要新建一个类 MyAppGlideModule :

        @GlideModule
        public final class MyAppGlideModule extends AppGlideModule {
        @Override
        public boolean isManifestParsingEnabled() {
        return false;
        }
        }

        用法:新类添加之后,Build -> Make Project
        然后将 Glide.with() .... 替换成 GlideApp.with() ...

      本文标题:【 Android 】圆形图片

      本文链接:https://www.haomeiwen.com/subject/kjcaextx.html