سلام. امروز تصمیم گرفتم یه آموزش خیلی ساده اما واقعا کاربردی براتون قرار بدم. دقت کنید در این آموزش به مباحث نمایش تصویر از sd کارت، نمایش تصویر از آدرس اینترنتی، نمایش تصویر از پوشه drawable برنامه  پرداخته خواهد شد. یه لایبرای توی اندروید هست به نام پیکاسو این لایبراری از قوی ترین لایبراری های موجود توی ضمینه نمایش تصویر هست. توی این آموزش بهتون یاد میدم که چجوری از این لایبراری استفاده کنید.

اگه شما از اندروید استودیو استفاده می کنید خط زیر رو به dependencies اضافه کنید

compile 'com.squareup.picasso:picasso:2.5.2'

اما اگه از اکلیپس استفاده می کنید نسخه نهایی فایل jar پیکاسو رو از وبسایت رسمی خودش دریافت کنید. (وبسایت رسمی لایبرای پیکاسو کلیک کنید)

بعد از اینکه لایبراری رو به پروژه تون اضافه کردید میتونیم کار رو شروع کنیم.

نمایش تصویر از آدرس اینترنتی:

Picasso.with(context).load("YOUR PIC ADRESS").into(imageView);

شما به جای YOUR PIC ADDRESS آدرس تصویر خودتون رو بزارید. و به جای imageView اسم ایمیج ویو خودتون رو بزارید.

دقت کنید که شما می تونید این کد رو توی آداپتور های لیست ویو یا گرید ویو یا ریسایکلر ویو قرار بدید که خوبیش سرعت بالا و کش کردن تصاویره یعنی بار اول که تصویر رو از اینترنت نشون داد همون تصویر رو ذخیره میکنه و برای بار بعدی وقتی اون آدرس رو خوند دیگه دانلود نمیکنه و همون ذخیره شده رو نشون میده (البته اگه درست خونده باشم.) من خیلی از این کتابخونه استفاده میکنم.

نمایش تصویر از sd card یا حافظه داخلی:

 

Picasso.with(context).load(new File("Your Address From SD Card")).into(imageView3);

دقت کنید که آدرس تصویر توی sd card رو به صورت استرینگ به جای Your Address From SD Card قرار بدید.

تجربه من از نمایش تصویر sd card یا حافظه داخلی اینه که من همیشه قبل از آدرس تصویر file:/// رو هم وارد میکنم چون هیچوقت تا حالا بدون این کار نکرده. 

نمایش تصویر از drawable:

برای نمایش تصویری که توی برنامه قرار دادید و میخواهید به کاربر نمایش بدید چند تا راه داره یکیش این راه هست که به نظرم با وجود کد های خود اندروید برای پروژه های ساده نیازی به استفاده از پیکاسو برای این کار نیست.

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);

 

توابع کاربردی کتابخانه پیکاسو:

پیکاسو دارای یه توابعی هست که توضیحشون خالی از لطف نیست.

تابع resize و centerCrop:

تابع resize دو مقدار طول و عرض رو میگیره و تصویر رو همون اندازه نشون میده. و کار تابع centerCrop دقیقا همون کاریه که ما برای imageView از توی فایل xml مقدار scaleType رو تنظیم میکنیم.

تابع placeholder:

این تابع یک تصویر رو از drawable برنامه میگیره و تا زمانی که تصویرتون لود نشده نشون میده.

تابع error:

این تابع هم یه تصویر رو از drawable به عنوان ورودی میگیره. این تابع زمامی عمل میکنه که url داده شده اشتباه باشه و یا اون آدرس امکان باز شدن رو نداشته باشه یا آدرس شما آدرس یک تصویر نباشه و زمانی که عمل میکنه تصویری رو که بهش دادید میزاره روی imageview

 

گرفتن Bitmap توسط پیکاسو (از آدرس اینترنتی و یا حافظه داخلی و یا drawable برنامه):

این عمل زمانی نیاز میشه که شما نمیخواهید مستقیم بیت مپ یا تصویرتون رو توی imageView بریزید بلکه یه کار دیگه ای باهاش دارید مثلا میخواهید اون bitmap رو ویرایش کنید و... پس نیاز دارید تا بیت مپ رو داشته باشید. برای این کار از کد زیر استفاده میکنیم.

private Target target = new Target() {
      @Override
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
      }

      @Override
      public void onBitmapFailed(Drawable errorDrawable) {
      }

      @Override
      public void onPrepareLoad(Drawable placeHolderDrawable) {
      }
}

private void someMethod() {
   Picasso.with(this).load("url").into(target);
}

@Override 
public void onDestroy() {  // could be in onPause or onStop
   Picasso.with(this).cancelRequest(target);
   super.onDestroy();
}

در کد بالا وقتی شما متد someMethod رو صدا بزنید پیکاسو فعال میشه و url رو میخونه و میده به تارگت برای اینکه شما به بیت مپ گرفته شده دسترسی داشته باشید توی تارگت یه تابع onBitmapLoaded وجود داره که میتونید بیت مپ رو به عنوان ورودی از تابع بگیرید و هر بلایی که دوست دارید سرش بیارید.s14

 

خب دوستان اگه باز هم مشکلی داشتید با پیکاسو یه صلوات برای شادی روحش بفرستید مشکل حل میشه s10

شوخی کردم اگه مشکلی بود در خدمتم می تونید از قسمت سوالات بپرسید تا جواب بدم.