[Android] Load ảnh với thư viện Picasso

Author: | Posted in Android, Programming 2 Comments
[Android] Load ảnh với thư viện Picasso
5 (100%) 4 votes

Khi phát triển các ứng dụng có nhiều ảnh hoặc yêu cầu phải load và hiển thị ảnh từ internet thì rất nhiều bạn sẽ băn khoăn về cách làm sao cho vừa không bị “đơ” UI (không gây khó chịu cho người dùng) lại vừa dễ dàng trong việc viết code và quản lý code. Trước đây mình cũng đã từng rất băn khoăn về vấn đề này bởi nếu dùng Loader hay AsyncTask thì code sẽ khá phức tạp, còn nếu cứ load thẳng ảnh trong Main Thread thì người dùng sẽ khó chịu vì không thể tương tác với UI, nhưng từ khi chuyển sang sử dụng Picasso thì các vấn đề này đã không còn nữa bởi vì chính Picasso đã lo hết những phần này rồi. Chính vì vậy, trong bài viết này mình muốn giới thiệu tới các bạn về Picasso, một thư viện chuyên về download và hiển thị ảnh từ internet rất tuyệt vời cho Android.

picasso sample

Mình sẽ không dài dòng giới thiệu về Picasso mà sẽ chỉ giới thiệu sơ qua về các ưu điểm của thư viện này rồi đi luôn vào cách sử dụng thư viện này luôn. Còn nếu các bạn muốn biết thêm các thông tin khác, hãy vào trang chủ Picasso theo đường dẫn sau đây http://square.github.io/picasso/ để tự mình tìm hiểu nhé.

 

I. Các ưu điểm của Picasso

Picasso là một thư viện chuyên về load ảnh với các ưu điểm sau:

  • Đơn giản hóa code chính là ưu điểm hàng đầu của Picasso. Thay vì phải viết hàng chục thậm chí là cả trăm dòng code thì với thư viện này bạn sẽ chỉ mất vài dòng thậm chí là chỉ 1 dòng code là bạn đã hoàn thành việc load ảnh tử internet vào ImageView của bạn. Đây chính là điểm tuyệt vời nhất khi bạn sử dụng thư viện load ảnh này.
  • Tối ưu hóa bộ nhớ sử dụng của ứng dụng
  • 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 độ load ảnh
  • Tự động recycle bitmap và cancel download theo ngữ cảnh. Nhờ ưu điểm này mà bạn sẽ không còn phải để ý xem mình đã recycler bitmap hay chưa, hay có cần bắt exception khi quá trình download bị cancel hay không… Tất tần các công việc này hãy để thư viện lo và bạn chỉ cần viết code để xử lý cho luồng chính mà thôi.

Đó chính là các ưu điểm chính của Picasso, mình tin chắc rằng rất nhiều bạn chỉ cần đọc tới đây thôi cũng đã có thể tưởng tượng được độ “bá đạo” của thư viện load ảnh này rồi phải không :)).

 

II. Cách sử dụng Picasoo

Như đã nói ở trên, việc sử dụng Picasso sẽ giúp bạn đơn giản hóa được code của mình, chính vì mục đích này nên cách sử dụng của Picasso của cưc kì đơn giản, chỉ bao gồm 2 bước sau:

Bước 1: Thêm thư viện Picasso vào build.gradle

Để làm được điều này bạn chỉ việc thêm đoạn mã sau vào trong file build.gradle của project:

Chú ý: Nếu trong build.gradle của project đã có phần dependencies thì chỉ việc thêm đoạn trong dấu ngoặc {} mà không cần tạo lại phần dependencies nữa.

Bước 2: Sử dụng Picasso để load ảnh từ internet vào ImageView

Giả sử ta cần load ảnh có đường dẫn là http://i.imgur.com/DvpvklR.png vào ImageView có tên là imageView thì ta sẽ làm như sau:

Thật là đơn giản phải không nào, chỉ với 1 dòng code vừa đơn giản mà lại dễ hiểu là ta đã có thể hoàn thành xong công việc mà đáng lẽ ra nếu không sử dụng thư viện thì ta có thể mất hàng giờ thậm chí là vài ngày nếu như chưa quen, hơn nữa lại rất dễ dẫn đến các bug khác phát sinh do không kiểm soát được hết các trường hợp.

 

III. Một số tùy biến của Picasso

Không chỉ dừng lại ở việc load ảnh, Picasso còn cung cấp cho chúng ta 1 số tùy biến khác để việc load ảnh và handle các tình huống được đơn giản và dễ dàng hơn. Các tùy biến đó bao gồm:

1. Placeholder()

Tùy chọn placeholder() cho phép chúng ta hiển thị 1 ảnh nào đó trên imageView trong quá trình mà Picasso đang thực hiện load bức ảnh mà ta cần load vào ImageView, ví dụ như bạn có thể hiển thị hình ảnh loading… hoặc biểu tượng bất kì nào đó để thể hiện cho người dùng biết là ảnh đang trong quá trình loading.

placeholder() có thể nhận đầu vào là 1 đối tượng Drawable hoặc là drawable_id

Ví du:

2. Error()

Tùy chọn error() cho phép bạn hiển thị một bức ảnh nào đó nếu như việc load bức ảnh vào imageView không thể hoàn thành được. Với tùy chọn này, các bạn có thể dễ dàng thể hiện cho người dùng việc load ảnh hiện đang gặp vấn đề và cần phải tải lại.

Cũng tương tự như placeholder(), error() cũng nhận đầu vào là 1 đối tượng Drawable hoặc drawable_id

Ví dụ:

3. Load ảnh từ Resources, Assets, files, …

Không chỉ cho phép load ảnh từ internet, Picasso còn cho phép chúng ta load ảnh từ Resources, Assets của application hoặc từ files nằm trên bộ nhớ trong hoặc thẻ nhớ của máy.

Ví dụ:

  • Load ảnh từ files:

Theo File URI:

Theo File object:

  • Load ảnh từ Resources:

 

Như vậy là mình đã giới thiệu tới các bạn cách sử dụng thư viện Picasso để load ảnh, hi vọng sẽ giúp ích được các bạn.

Và các bạn cũng đừng quên ủng hộ mình trong các bài viết tới trên blog này nhé.

Loading Facebook Comments ...
Comments
  1. Posted by Do Trinh
  2. Posted by Avalanchecvm

Add Your Comment