Android图片加载框架——Picasso和Glide
来源:互联网 发布:部队网络安全管理 编辑:程序博客网 时间:2024/05/18 13:08
首先说Picasso,Picasso 是 Square 公司的杰作,名字叫「毕加索,充满文艺气息,意为加载图片就像画画一样,是一门艺术。Picasso 不仅具备加载图片的强大功能,还是如此的简洁。
Picasso默认的缓存分配大小特点:
LRU缓存占应用程序可用内存的15%
本地缓存占到硬盘空间的2%但不超过50M并且不小于5M(前提是这种情况只在4.0以上有效果,或者你能像OKHttp那样提供
一个本地缓存库来支持全平台)
Picasso默认开启3个线程来进行本地与网络之间的访问
Picasso加载图片顺序, 内存–>本地–>网络
github地址:https://github.com/square/picasso
使用实例:
- public class PicassoActivity extends AppCompatActivity {
-
- private ImageView mLoadImg;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_loader_img);
- mLoadImg = (ImageView) findViewById(R.id.loadImg);
- }
-
- public void loadImage(View view) {
-
-
-
-
- tranformationImage(ImageUrls.bigImages[6],mLoadImg);
- }
-
-
- private void basicLoad(String url,ImageView iv){
- Picasso.with(this)
- .load(url)
- .placeholder(R.mipmap.ic_launcher)
- .error(android.R.drawable.ic_menu_delete)
- .noFade()
- .resize(500,400)
- .centerCrop()
-
-
- .into(iv);
- }
-
-
- private void loadAndSaveImage(String imgUrl,ImageView iv){
- Picasso.with(this)
- .load(imgUrl)
- .rotate(90f)
- .into(target);
- }
-
- private Target target = new Target() {
- @Override
- public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
-
- mLoadImg.setImageBitmap(bitmap);
- File file = new File(getExternalCacheDir().getAbsolutePath()+File.separator+"picasso.png");
- try {
- FileOutputStream fos = new FileOutputStream(file);
- bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void onBitmapFailed(Drawable errorDrawable) {
-
- }
- @Override
- public void onPrepareLoad(Drawable placeHolderDrawable) {
-
- }
- };
-
-
- private void tranformationImage(String imgPaht,ImageView iv){
- Picasso.with(this)
- .load(imgPaht)
- .transform(new CircleTransfromation())
- .into(iv);
- }
- }
- public class CircleTransfromation implements Transformation{
- @Override
- public Bitmap transform(Bitmap source) {
-
-
- int size = Math.min(source.getWidth(),source.getHeight());
- int x = (source.getWidth()-size)/2;
- int y = (source.getHeight()-size)/2;
-
- Bitmap squareBitmap = Bitmap.createBitmap(source,x,y,size,size);
- if (squareBitmap!=source){
-
- source.recycle();
- }
-
- Bitmap bm = Bitmap.createBitmap(size,size,source.getConfig());
- Canvas canvas = new Canvas(bm);
- Paint paint = new Paint();
- BitmapShader shader = new BitmapShader(squareBitmap,BitmapShader.TileMode.CLAMP,
- BitmapShader.TileMode.CLAMP);
- paint.setShader(shader);
- paint.setAntiAlias(true);
-
- float radius = size/2f;
- canvas.drawCircle(radius,radius,radius,paint);
- squareBitmap.recycle();
- return bm;
- }
-
- @Override
- public String key() {
- return "circle";
- }
- }
效果:
Google一位员工完成了Glide,Glide是基于 Picasso的,依然有保存了Picasso的简洁风格,但是在此做了大量优化与改进。Glide 默认的 Bitmap 格式是 RGB_565 格式,而Picasso默认的是 ARGB_8888 格式,这个内存开销要小一半。在磁盘缓存方面,Picasso只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide会根据你ImageView的大小来缓存相应大小的图片尺寸,比如你ImageView大小是200*200,原图是 400*400,而使用Glide 就会缓存 200*200规格的图,而Picasso只会缓存 400*400 规格的。这个改进就会导致 Glide 比 Picasso 加载的速度要快,毕竟少了每次裁剪,重新渲染的过程。令人兴奋的是Glide 支持加载 Gif 动态图,而Picasso不支持该特性。
github地址:https://github.com/bumptech/glide
使用实例:
- public class GlideActivity extends AppCompatActivity {
-
- private ImageView mLoadImg;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_loader_img);
- mLoadImg = (ImageView) findViewById(R.id.loadImg);
- }
-
- public void loadImage(View view) {
- basicLoad(ImageUrls.newImageUrls[0],mLoadImg);
- }
-
-
- private void basicLoad(String imgPath,ImageView iv){
- Glide.with(this)
- .load(imgPath)
-
- .priority(Priority.HIGH)
- .placeholder(R.mipmap.ic_launcher)
- .error(android.R.drawable.ic_menu_delete)
- .centerCrop()
-
- .into(iv);
- }
-
-
- private void loadAndSaveImage(String url,ImageView iv){
-
- Glide.with(this)
- .load(url).asBitmap().into(target);
- }
-
- SimpleTarget target = new SimpleTarget<Bitmap>(300,600) {
- @Override
- public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
- mLoadImg.setImageBitmap(resource);
-
- File file = new File(getExternalCacheDir().getAbsolutePath()+File.separator+"glide.png");
- try {
- FileOutputStream fos = new FileOutputStream(file);
- resource.compress(Bitmap.CompressFormat.PNG,100,fos);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- };
- }
1 0
- Android图片加载框架——Picasso和Glide
- Android图片加载框架——Picasso和Glide
- Android图片加载框架分析之Glide、Picasso和Fresco
- 图片加载框架Picasso和Glide
- Android图片加载库Picasso和Glide
- picasso和Glide加载图片
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- Android万能的图片加载框架(Glide、Fresco、Picasso)
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android图片加载框架比较----Glide,Picasso,Fresco
- 强大的图片加载框架Picasso和Glide
- 主流图片加载框架---Glide PK Picasso
- 图片加载的框架 Imageloader Picasso Glide
- Android图片加载库Glide和Picasso的区别
- Material Design控件使用(二)
- 如何使用Git从Github中下载代码
- RecyclerView 下拉刷新上拉加载更多
- 待添加,Android扫描二维码,拍照 录像
- Android图片加载框架——Fresco
- Android图片加载框架——Picasso和Glide
- Android图片加载框架——UniversalImageLoader
- 【STM8L】STM8L之自定义长短按键
- InSAR-DInSAR 技术细节(四) Range spectral shift
- 如何让字符串以彩色字体输出
- SQL Server TUNING-from DN
- matlab 等待gui操作
- Bit Operation problems
- 算法竞赛入门经典(第二版)习题解答参考(第二章)