简介
山东快乐扑克3 www.rn5v7.cn
Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大.
添加依赖
compile 'com.github.bumptech.glide:glide:3.7.0'
加载网络图片
/**
* Created by Greathfs on 2016/6/6.
*/
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
String url = "//www.qq745.com/uploads/allimg/141106/1-141106153Q5.png";
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(url).
asBitmap().
into(targetView);
}
}
加载资源图片
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
int resourceId = R.drawable.test;
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(resourceId).
asBitmap().
into(targetView);
}
}
加载本地文件图片
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(file).
asBitmap().
into(targetView);
}
}
从Uri中加载
/**
* Created by Greathfs on 2016/6/6.
*/
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.drawable.test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(uri).
asBitmap().
into(targetView);
}
}
6.加载gif图片
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.smail).
asGif().
into(targetView);
}
}
设置默认图片和加载失败时显示的图片
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.test).
asBitmap().
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
into(targetView);
}
}
淡入显示效果
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.test).
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
crossFade().
into(targetView);
}
}
另外,crossFade还可以接收一个参数来设置淡入显示效果的持续时间,crossFade(int duration); 如果你想直接显示图片,而不是淡入显示图片,则可以通过dontAnimate()方法设置.
调整图片像素大小
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.test).
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
crossFade(1000).
override(80,80).
into(targetView);
}
}
设置CenterCrop,FitCenter
CenterCrop,FitCenter都是对目标图片进行裁剪,了解过ImageView的ScaleType属性就知道,这2种裁剪方式在ImageView上也是有的,分别对应ImageView的ImageView.ScaleType.CENTER_CROP和mageView.ScaleType.FIT_CENTER的.
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);
Glide.with(this).
load(R.drawable.test).
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
crossFade(1000).
override(80,80).
centerCrop().
into(targetView);
}
}
磁盘缓存,磁盘缓存通过diskCacheStrategy(DiskCacheStrategy)来设置,DiskCacheStrategy一共有4种模式:
DiskCacheStrategy.NONE:什么都不缓存 DiskCacheStrategy.SOURCE:仅缓存原图(全分辨率的图片) DiskCacheStrategy.RESULT:仅缓存最终的图片,即修改了尺寸或者转换后的图片 DiskCacheStrategy.ALL:缓存所有版本的图片,默认模式
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
targetView.setScaleType(ImageView.ScaleType.FIT_CENTER);
Glide.with(this).
load(R.drawable.test).
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
crossFade(1000).
override(80, 80).
centerCrop().
skipMemoryCache(true).
diskCacheStrategy(DiskCacheStrategy.RESULT).
into(targetView);
}
}
缓存设置
在GlideModule 中,我们可以设置磁盘缓存的位置,磁盘缓存的大小和内存缓存的大小,同时还可以设置图片的显示质量.
要是用GlideModule ,需要创建它的实现类,然后在manifests中申明实现类的全类路径:
<meta-data
android:name="com.example.greathfs.httputilsdemo.image.glide.module.SimpleGlideModule"
android:value="GlideModule" />
GlideModule 的实现类,需要实现applyOptions方法:
/**
* 所以你知道要创建一个额外的类去定制 Glide。
* 下一步是要全局的去声明这个类,让 Glide 知道它应该在哪里被加载和使用。
* Glide 会扫描 AndroidManifest.xml 为 Glide module 的 meta 声明。
* 因此,你必须在 AndroidManifest.xml 的 <application> 标签内去声明这个SimpleGlideModule。
* Created by mChenys on 2016/6/10.
*/
public class SimpleGlideModule implements GlideModule {
public static DiskCache cache;
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
File cacheDir = PathUtils.getDiskCacheDir(context, CacheConfig.IMG_DIR);
cache = DiskLruCacheWrapper.get(cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE);
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
return cache;
}
});
MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int customMemoryCacheSize = (int) (1.2 * defaultMemoryCacheSize);
int customBitmapPoolSize = (int) (1.2 * defaultBitmapPoolSize);
builder.setMemoryCache(new LruResourceCache(customMemoryCacheSize));
builder.setBitmapPool(new LruBitmapPool(customBitmapPoolSize));
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
设置加载缩略图
通过设置缩略图,我们可以在显示目标图片之前先展示一个第分辨率或者其他图片,当全分辨率的目标图片在后台加载完成后, Glide会自动切换显示全像素的目标图片.
设置缩略图有2种方式: 通过thumbnail(float)指定0.0f~1.0f的原始图像大小,例如全像素的大小是500*500,如果设置为thumbnail为0.1f,即目标图片的10%,显示的缩略图大小就是50*50;
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.test).
placeholder(R.drawable.bg_loading).
error(R.drawable.bg_error).
crossFade(1000).
override(80, 80).
centerCrop().
skipMemoryCache(true).
diskCacheStrategy(DiskCacheStrategy.RESULT).
thumbnail(0.1f).
into(targetView);
}
}
通过thumbnail(DrawableRequestBuilder)方式来指定缩略图,该缩略图可以使用load的所有方式(网络,文件,uri,资源)加载.
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
DrawableRequestBuilder<String> thumbnailRequest = Glide
.with(this)
.load("//www.qq745.com/uploads/allimg/141106/1-141106153Q5.png");
Glide.with(this).
load(R.drawable.test).
override(80, 80).
centerCrop().
skipMemoryCache(true).
diskCacheStrategy(DiskCacheStrategy.RESULT).
thumbnail(thumbnailRequest).
into(targetView);
}
}
动画处理
通过animate()方法可以设置xml文件定义的4种补间动画(alpha、scale、translate、rotate) 例如:
res\anim\left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="//schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-50%p"
android:toXDelta="0"/>
<alpha
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
使用方式:
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
Glide.with(this).
load(R.drawable.test).
asBitmap().
animate(R.anim.left_in).
into(targetView);
}
}
处理此外,还可以通过animate指定属性动画:
public class TestGlideActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ImageView targetView = (ImageView) findViewById(R.id.iv_target);
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
ObjectAnimator moveIn = ObjectAnimator.ofFloat(view, "translationX", -500f, 0f);
ObjectAnimator rotate = ObjectAnimator.ofFloat(view, "rotation", 0f, 360f);
ObjectAnimator fadeInOut = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f, 1f);
ObjectAnimator moveTop = ObjectAnimator.ofFloat(view, "translationY", 0f, -2000, 0f);
AnimatorSet animSet = new AnimatorSet();
animSet.play(rotate).with(fadeInOut).after(moveIn).before(moveTop);
animSet.setDuration(5000);
animSet.start();
}
};
Glide.with(this).
load(R.drawable.test).
asBitmap().
animate(animationObject).
into(targetView);
}
}