package com.wuxiaolong.androidsamples.glide; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.RenderScript; import android.renderscript.ScriptIntrinsicBlur; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; import com.wuxiaolong.androidsamples.R; public class GlideActivity extends AppCompatActivity { ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_glide); imageView = (ImageView) findViewById(R.id.imageView); String imageUrl = "https://raw.githubusercontent.com/bumptech/glide/master/static/glide_logo.png"; // String imageUrl = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif"; // Uri imageUrl = resourceIdToUri(GlideActivity.this, R.mipmap.image_test); // int imageUrl = R.mipmap.image_test; Glide.with(GlideActivity.this) .load(imageUrl) .placeholder(R.mipmap.ic_launcher) // can also be a drawable .error(R.mipmap.ic_launcher) // will be displayed if the image cannot be loaded // .skipMemoryCache(true) .diskCacheStrategy(DiskCacheStrategy.NONE) // .thumbnail(0.1f) .transform(new BlurTransformation(GlideActivity.this)) .into(imageView); } public class BlurTransformation extends BitmapTransformation { private RenderScript rs; public BlurTransformation(Context context) { super(context); rs = RenderScript.create(context); } @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { Bitmap blurredBitmap = toTransform.copy(Bitmap.Config.ARGB_8888, true); // Allocate memory for Renderscript to work with Allocation input = Allocation.createFromBitmap( rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED ); Allocation output = Allocation.createTyped(rs, input.getType()); // Load up an instance of the specific script that we want to use. ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); script.setInput(input); // Set the blur radius script.setRadius(10); // Start the ScriptIntrinisicBlur script.forEach(output); // Copy the output to the blurred bitmap output.copyTo(blurredBitmap); toTransform.recycle(); return blurredBitmap; } @Override public String getId() { return "blur"; } } public static final String ANDROID_RESOURCE = "android.resource://"; public static final String FOREWARD_SLASH = "/"; /** * 简单的从资源 id 转换成 Uri */ private static Uri resourceIdToUri(Context context, int resourceId) { return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + FOREWARD_SLASH + resourceId); } }