12/08/2018, 15:20

Sử dụng thư viện Picasso để load ảnh trong android

Khi phát triển ứng dụng có nhiều ảnh hoặc phải load và hiển thị ảnh từ server thì có rất nhiều bạn băn khoăn là làm sao cho app không bị đơ UI, khi chờ phải load ảnh Trước đây thì mình thường viết AsyncTask cho chạy trong MainThead, những load ảnh sẽ chạy bất đồng bộ để app hiển thị hết xong thì ...

Khi phát triển ứng dụng có nhiều ảnh hoặc phải load và hiển thị ảnh từ server thì có rất nhiều bạn băn khoăn là làm sao cho app không bị đơ UI, khi chờ phải load ảnh Trước đây thì mình thường viết AsyncTask cho chạy trong MainThead, những load ảnh sẽ chạy bất đồng bộ để app hiển thị hết xong thì ảnh load về dần dần. Chứ nếu để load ảnh tuần tự thì chắc để chờ đợi xong load ảnh mà chưa kịp load xong đã chuyển màn hình thì chắc là đơ luôn app Nhưng từ khi chuyển sang dùng Picasso thì không cần phải lo vấn đề này nữa bởi Picasso đã làm hết những phần này rùi. Chính vì thế trong bài viết này mình giới thiệu thư viện chuyên về download ảnh từ server cho app android rất tuyệt vời Các bạn muốn tìm hiểu rõ hơn về Picasso thì vào http://square.github.io/picasso/

Picasso có những ưu điểm sau: 1. Đơn giản hóa code, chính là ưu điểm hàng dầu của Picasso, thay vì viết nhiều dòng bạn chỉ cần viết có 1 dòng là có thể load được ảnh 2. Tối ưu hóa bộ nhớ sử dụng của ứng dụng 3. Tự động sử dụng RAM cache và Disk cache để tối ưu hóa lưu lượng mạng và tăng tốc độ hiển thị ảnh 4. Tự động transforms bitmap và cancel download ngữ cảnh. Bạn sẽ không cần phải chú ý đến transforms bitmap và download bị cancel hay không. Công việc này thư viện làm hết => Đó chính là ưu điểm chính của Piccaso, mình chỉ khoái là nó chỉ cần có vài dòng làm được hết không phải sử dụng nhiều code

Việc sử dụng picasso được đơn giản hóa như là cách code của nó vậy

2.1. Thêm thư viện vào build.gradle

Bạn chỉ cần copy đoạn mã sau vào trong file build.gradle

 dependencies {
    compile 'com.squareup.picasso:picasso:2.5.2'
}

2.2. Load ảnh từ internet vào view

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Thật đơn giản, chỉ với 1 dòng code là ta đã có thể hiển thị ảnh lên view, nếu không sử dụng thư viện thì cần phải code nhiều. Sử dụng thư viện giúp tránh được bug phát sinh.

3.1. Placeholder

Cho phép hiển thị mặc định ảnh nào đó trong quá trình chờ load image vào View, cái này giống như lúc thiết kế view hiển thị mình cho luôn ảnh mặc định sẽ hiển vào ImageView

Picasso.with(context)
	.load("http://i.imgur.com/DvpvklR.png")
	.placeholder(R.mipmap.ic_launcher)
	.into(imageView);

3.2. Error

Sẽ hiển thị bức ảnh khi việc load ảnh từ server không thể hoàn thành hoặc có lỗi xảy ra trong quá trình tải ảnh

Picasso.with(context)
	.load("http://i.imgur.com/DvpvklR.png")
	.placeholder(R.mipmap.ic_launcher)
	.error(R.drawable.error)
	.into(imageView);

3.3. RESOURCE LOADING

  • Load resource từ drawable
 Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
  • Load resouce từ asset
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
  • Load resource từ file
Picasso.with(context).load(new File(...)).into(imageView3);

3.4 TRANSFORMATIONS

Bạn có thể chuyển đổi kích thước của ảnh để phù hợp với view hiển thị và bộ nhớ

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)

Trên là 1 trong những thư viện load ảnh và sử dụng nhiều trong android, bạn có thể tham khảo thêm nhiều thư viện rất được sử dụng trong android tại đây https://github.com/codepath/android_guides/wiki/Must-Have-Libraries

0