Gilde加载圆形图片

实际开发中,很多项目中需要用到圆形图片,例如,项目中个人资料的用户头像。加载图片的框架有很多,我们就简单的说几个,及其他们的优缺点。
首先是Fresco,它的优点是其他几个框架没有的,或者说是其他几个框架的短板。
优点:
1.图片存储在安卓系统的匿名共享内存,而不是虚拟机的堆内存中,图片的中间缓存数据也存放在本地堆内存。所以程序有更多的内存使用,不会因为图片的加载而导致OOM(OOM就是内存溢出,即Out Of Memory。也就是说内存占有量超过了VM所分配的最大。),同时也减少垃圾回收器频繁的回收Bitmap导致界面的卡顿,性能更高
2.渐进式加载JPEG图片,支持图片从模糊到清晰的加载
3.图片可以以任意的中心点显示在ImageView中,而不仅仅是图片的中心。
4.JPEG图片改变大小也是在native进行的,不是在虚拟机的堆内存,同样减少OOM。
5.很好的支持GIF图片的显示
缺点:
1.框架较大,影响apk体积
2.使用较繁琐
ImageLoader
比较老的框架,稳定,加载速度适中,缺点在于不能加载Gif图片,使用稍微繁琐,并且缓存机制没有和http的缓存机制很好的结合,完全是子的一套缓存机制。
PIcasso
优点:使用方便,一行代码完成加载图片和显示出来,框架体积小
缺点:不支持GIf图片,并且他可能是想让服务器去处理图片的缩放,他的缓存图片是未缩放的,并且是默认使用ARGB_8888格式缓存图片的,缓存体积大
这就是我们今天的主角 Glide
glide可以说是Picasso的升级版,有picass的优点,并且支持gif图片的加载和显示,图片缓存也会自动的缩放,默认使用RGB-565格式缓存图片,是picasso缓存体积的一半。
今天我们就用glide实现加载圆形图片和
先看一个效果图
这里写图片描述

首先先加载glide的jia包

compile 'com.github.bumptech.glide:glide:3.7.0'

当然有网络请求,你一定不能忘记加网络权限

<uses-permission android:name="android.permission.INTERNET" />

自定义一个glide的圆形转换类

public class GlideCircleTransform extends BitmapTransformation{
    public GlideCircleTransform(Context context) {
        super(context);
    }

    @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return circleCrop(pool, toTransform);
    }

    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;
        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

        Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);
        return result;
    }

    @Override public String getId() {
        return getClass().getName();
    }
}

xml文件布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f00"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/ima"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp" />

    <ImageView
        android:id="@+id/tv"
        android:layout_width="60dp"
        android:layout_height="60dp"
         />
</LinearLayout>

加载时候就只需要new类就可以

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView ima = (ImageView) findViewById(R.id.ima);
        final ImageView tv = (ImageView) findViewById(R.id.tv);
        //这是加载圆形图片的
        Glide.with(this).load("http://image.tianjimedia.com/uploadImages/2013/235/56Y682R36Y6X.jpg").transform(new GlideCircleTransform(this)).into(ima);
        //这是加载正常图片的
        Glide.with(this).load("http://pic33.nipic.com/20130916/3420027_192919547000_2.jpg").into(tv);
    }
}

写到这里,技术就已经写完了。剩下来的时间就到了博主讲段子的时间了。今天我们开波车。
这里写图片描述
我们要说的还是我那个朋友,丑康的事。丑康,你别看他丑,但是有大智慧,也有大毅力的一个人,为什么这么说,因为他喝饮料都可以把饮料钱从老板手里拿回来,他每次去小卖铺买冰红茶,买了喝一半,然后尿一半回去,然后回店里告诉老板,你卖的饮料过期了,都变味了,你不信你自己喝下,老板一喝,不对劲,只能给他退钱,自从他喝了一款叫做营养快线的饮料后,他的身体一天不如一天了。
可能你会说,为什么要一直突出丑康的丑,那是因为

博主很帅!!!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值