Glide自v3.0到v4.0使用,发生了一些比较大的改变,使用方式和编程模型有了新的变化,这些变化,使得Glide的功能更加强大,性能更加优良,提供了开放的编程接口,便于开发者自定制,以适应自有项目的定制化开发。

本例给出一些最新Android Glide 4.0的新变化、新模型的简单使用方式。
写一个简单垂直线性布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="zhangphil.phildemo.MainActivity"> 
 
    <ImageView 
        android:id="@+id/image1" 
        android:layout_width="100dp" 
        android:layout_height="100dp" /> 
 
    <ImageView 
        android:id="@+id/image2" 
        android:layout_width="100dp" 
        android:layout_height="100dp" /> 
 
    <ImageView 
        android:id="@+id/image3" 
        android:layout_width="100dp" 
        android:layout_height="100dp" /> 
 
    <ImageView 
        android:id="@+id/image4" 
        android:layout_width="100dp" 
        android:layout_height="100dp" /> 
 
</LinearLayout>




测试的MainActivity.java,在这里面有四个不同的新版Glide 4.0使用方式:


package zhangphil.phildemo; 
 
import android.graphics.drawable.Drawable; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ImageView; 
 
import com.bumptech.glide.Glide; 
import com.bumptech.glide.Priority; 
import com.bumptech.glide.RequestBuilder; 
import com.bumptech.glide.load.DataSource; 
import com.bumptech.glide.load.engine.DiskCacheStrategy; 
import com.bumptech.glide.load.engine.GlideException; 
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; 
import com.bumptech.glide.request.RequestListener; 
import com.bumptech.glide.request.RequestOptions; 
import com.bumptech.glide.request.target.Target; 
 
public class MainActivity extends AppCompatActivity { 
    private String url = "https://www.baidu.com/img/bd_logo1.png"; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
 
        ImageView image1 = (ImageView) findViewById(R.id.image1); 
        ImageView image2 = (ImageView) findViewById(R.id.image2); 
        ImageView image3 = (ImageView) findViewById(R.id.image3); 
        ImageView image4 = (ImageView) findViewById(R.id.image4); 
 
        load1(image1); 
        load2(image2); 
        load3(image3); 
        load4(image4); 
    } 
 
    private void load1(ImageView image) { 
        Glide.with(this) 
                .load(url) 
                .apply(new RequestOptions().circleCrop().placeholder(R.mipmap.ic_launcher)) 
                .transition(new DrawableTransitionOptions().crossFade(2000)) 
                .into(image); 
    } 
 
    private void load2(ImageView image) { 
        RequestOptions options = new RequestOptions() 
                .centerCrop() 
                .placeholder(R.mipmap.ic_launcher_round) 
                .error(android.R.drawable.stat_notify_error) 
                .priority(Priority.HIGH) 
                //.skipMemoryCache(true) 
                .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC); 
 
        Glide.with(this) 
                .load(url) 
                .apply(options) 
                .into(image); 
    } 
 
    private void load3(ImageView image) { 
        Glide.with(this) 
                .load(url) 
                .listener(new RequestListener<Drawable>() { 
                    @Override 
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { 
                        return false; 
                    } 
 
                    @Override 
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { 
                        return false; 
                    } 
                }) 
                .apply(new RequestOptions().centerInside()) 
                .thumbnail(Glide.with(this).load(R.mipmap.ic_launcher)) 
                .into(image); 
    } 
 
    private void load4(ImageView image) { 
        RequestBuilder<Drawable> mRequestBuilder = Glide.with(this).load(url); 
 
        mRequestBuilder.listener(new RequestListener<Drawable>() { 
            @Override 
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { 
                return false; 
            } 
 
            @Override 
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { 
                return false; 
            } 
        }).transition(new DrawableTransitionOptions().crossFade(2000)) 
                .apply(new RequestOptions().circleCrop()) 
                .into(image); 
    } 
}

本例给出了几个不同的方式使用新版Glide 4.0加载网络图片,对比这四种方式,可以举一反三变化出更多使用方法。


不要忘了添加读写存储和访问网络的权限:


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




代码运行结果:



附录:

1,Glide在github上的开源项目主页:https://github.com/bumptech/glide

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Android旋转动画rotate动画,xml配置set实现详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。