BitmapUtils本身不是单例的,但我们在用它时,必须以单例模式的方式使用,这是因为涉及到内存缓存的原因,因此我们给它定义一个工类,设计成单例的。初始化时,可以用传统的方式之外,还有一种方式,也可以说是一种思想,就是把在整个项目运行之前需初始化且只初始化一次的对象在Application中的onCreate()中。
工具类:
/** * 定义一个工具类,设计成单例模式 */ public class BitmapHelper { private static BitmapUtils utils; // 定义一个方法,在Application中调用它而初始化 public static void initUtils(Context context){ // 实例化BitmapUtls utils=new BitmapUtils(context,null,0.25f,20 << 20); // 设置默认大小 utils.configDefaultBitmapMaxSize(100, 100); // 设置下载失败时的图片 utils.configDefaultLoadFailedImage(R.mipmap.ic_launcher); // 下载中时的图片 utils.configDefaultLoadingImage(R.mipmap.ic_launcher); // 对图片设置形状时用到config个factory,一层套一层,需注意,BitmapFactory是xUtils包中的 BitmapDisplayConfig config = new BitmapDisplayConfig(); BitmapFactory factory = new BitmapFactory() { @Override public BitmapFactory cloneNew() { return this; } // 创建一个新的Bitmap,并回收原来的 @Override public Bitmap createBitmap(Bitmap bitmap) { int height = bitmap.getHeight(); int width = bitmap.getWidth(); Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Paint paint = new Paint(); paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); paint.setStyle(Paint.Style.FILL); new Canvas(result).drawCircle(width / 2, height / 2, Math.min(width, height) / 2, paint); bitmap.recycle(); return result; } }; config.setBitmapFactory(factory); utils.configDefaultDisplayConfig(config); } public static BitmapUtils getUtils(){ return utils; } }
/** * 定义一个Application,并初始化BitmapUtils */ public class BaseApp extends Application { @Override public void onCreate() { super.onCreate(); BitmapHelper.initUtils(this); } }这里需注意,在清单文件中给Application加上name:
android:name=".BaseApp"接下来就是请求图片了,只有一句话而已:
public class MainActivity extends AppCompatActivity { private ImageView imageView; private String path="http://img001.21cnimg.com/photos/album/20151111/m600/00E973F202F65E0848B3E3875DF97FAB.jpeg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView)findViewById(R.id.imageView); // 请求网络图片进行下载 BitmapHelper.getUtils().display(imageView, path); Toast.makeText(MainActivity.this, "下载成功", Toast.LENGTH_SHORT).show(); } }最后,加上INTERNET权限。这样就好了,其实也是很简单的!效果如下: