使用Picasso加载图片

文章来自:https://github.com/lihenair/techtranslate/tree/master


一图胜千言。对于许多app也是一样的。为了使图片加载轻松无忧,我推荐使用图片加载库。个人偏爱Square发布的[Picasso]

(http://square.github.io/picasso/)库。无论是显示下载图片的占位符,或者缩放缓存图片,一库搞定。要使用Picasso,需要在你模块的gradle.build文件中增加这个依赖:
    
    compile 'com.squareup.picasso:picasso:2.5.2'

好了。万事俱备。让我们加载图片到**ImageView**中:

    Picasso.with(context.getApplicationContext())
      .load(url)
      .placeholder(R.drawable.img_placeholder)
      .error(R.drawable.img_error)
      .into(imageView);

使用这段代码,在下载图片时会显示默认图片。随后这张图片会消失。如果下载时发生错误,将显示错误图片。这是Picasso的基本用法。不过库里还有许多高级功能。
使用.fit()函数,Picasso自动缩放图片来适应**ImageView**的尺寸,这样有效的使用了内存。此外,
你可以使用.resize(width, heigth)函数来手动缩放图片 —— 这里还可以用.onlyScaleDown()。对于缩放,库还提供了.centerCrop()和.centerInside()方法。

另一个不错的功能可能是滚动时暂停图片下载。这是通过添加滚动标签实现的,标签可以到请求。例如,可以使用下面的RecyclerView.OnScrollListener:

    public class PicassoOnScrollListener extends RecyclerView.OnScrollListener {
        public static final Object TAG = new Object();
        private static final int SETTLING_DELAY = 500;
        
        private static Picasso sPicasso = null;
        private Runnable mSettlingResumeRunnable = null;
         
        public PicassoOnScrollListener(Context context) {
            if(this.sPicasso == null) {
                this.sPicasso = Picasso.with(context.getApplicationContext());
            }
        }
         
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
            if(scrollState == RecyclerView.SCROLL_STATE_IDLE) {
                recyclerView.removeCallbacks(mSettlingResumeRunnable);
                sPicasso.resumeTag(TAG);
             
            } else if(scrollState == RecyclerView.SCROLL_STATE_SETTLING) {
                mSettlingResumeRunnable = new Runnable() {
                @Override
                public void run() {
                sPicasso.resumeTag(TAG);
                }
                };
                 
                recyclerView.postDelayed(mSettlingResumeRunnable, SETTLING_DELAY);
                 
            } else {
                sPicasso.pauseTag(TAG);
            }
        }
    }

给recyclerView.addOnScrollListener(new PicassoOnScrollListener(context));增加监听者 —— 现在,如果为图片请求增加.tag(PicassoOnScrolllistener.TAG),
当用户滚动RecyclerView时,图片加载将暂停。

启用日志进行调试也方便了。此外,你可能为了低内存设备修改bitmap配置为RGB_565以较低的图片质量成本来防止发生OutOfMemoryError异常,。
可以通过在Application类中构建自定义的Picasso实例来实现。

    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
    
            Picasso.Builder picassoBuilder = new Picasso.Builder(this);
            if(BuildConfig.DEBUG) { picassoBuilder.loggingEnabled(true); }
            if(isLowMemoryDevice()) { picassoBuilder.defaultBitmapConfig(Bitmap.Config.RGB_565); }
            
            Picasso.setSingletonInstance(picassoBuilder.build());
        }
    
        private boolean isLowMemoryDevice() {
            if(Build.VERSION.SDK_INT >= 19) {
                return ((ActivityManager) getSystemService(ACTIVITY_SERVICE)).isLowRamDevice();
            } else {
                return false;
            }
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值