Android各种加载图片框架的实现

由于工作原因,把主流的图片加载框架都简单实现了一遍,在此记录。

Glide

Glide提供了丰富的api,封装了三级缓存,图片调整等操作。
只需要url 和 imageView就可以完成加载图片

        Glide.with(this)
                .load("http://01.imgmini.eastday.com/mobile/20180724/20180724075423_c7794e7e26733e24f90ffe12e3512888_7_mwpm_03200403.jpg")
                .into(imageView);

Picasso

Picasso和Glide同样强大,并且API十分相似,但是Glide在图片压缩的处理上做得更好。

      Picasso.get()
                .load("http://01.imgmini.eastday.com/mobile/20180724/20180724075423_c7794e7e26733e24f90ffe12e3512888_7_mwpm_03200403.jpg")
                .into(imageView);

ImageLoader

ImageLoader需要在setContentView()前先完成初始化

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build()
ImageLoader.getInstance().init(config);

再到具体的需要的地方通过以下函数实现

   ImageLoader.getInstance().displayImage("http://01.jpg",imageView);

Fresco

Fresco需要在setContentView()前先完成初始化

Fresco.initialize(this);

并且使用facebook包下的view

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/my_image_view"
        android:layout_width="130dp"
        android:layout_height="130dp"
        />

通过setImageURI就可以实现图片加载

        Uri uri = Uri.parse("http://01.imgmini.eastday.com/mobile/20180724/20180724075423_c7794e7e26733e24f90ffe12e3512888_7_mwpm_03200403.jpg");
        ImageView testImageView = findViewById(R.id.my_image_view);
        testImageView.setImageURI(uri);

Okhttp

基于通讯框架实现图片加载,就得先下载该图片,在加载进ImageView,由于是异步所以通过Handler实现UI线程通讯

   OkHttpClient client = new OkHttpClient();
        final Request request = new Request.Builder()
                .get()
                .url("http://01.imgmini.eastday.com/mobile/20180724/20180724075423_c7794e7e26733e24f90ffe12e3512888_7_mwpm_03200403.jpg")
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Toast.makeText(MainActivity.this,"failure ",Toast.LENGTH_LONG).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()){
                    Message message = handler.obtainMessage();
                    message.what = IS_SUCCESSFUL;
                    message.obj = response.body().bytes();
                    handler.sendMessage(message);
                }else{
                    handler.sendEmptyMessage(IS_FAILED);
                }
            }
        });

Retrofit

retrofit的实现图片加载的流程与OkHttp框架是一样的
先实现子域名的接口

public interface
IGetPicture {
    @GET("mobile/20180724/20180724075423_c7794e7e26733e24f90ffe12e3512888_7_mwpm_03200403.jpg")
    Call<ResponseBody> getCall();
}

再基于Retrofit发送

   Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://01.imgmini.eastday.com/")
                .build();
        IGetPicture iGetPicture = retrofit.create(IGetPicture.class);
        retrofit2.Call<ResponseBody>  response = iGetPicture.getCall();
//        Toast.makeText(this,response.request().url().toString(),Toast.LENGTH_LONG).show();
        response.enqueue(new retrofit2.Callback<ResponseBody>() {
            @Override
            public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
                if (response.isSuccessful()){
                    Message message = handler.obtainMessage();
                    message.what = IS_SUCCESSFUL;
                    try {
                        message.obj = response.body().bytes();
                        handler.sendMessage(message);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }else{
                    handler.sendEmptyMessage(IS_FAILED);
                }
            }

            @Override
            public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {

            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值