تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ پوریا شفیعی
آموزش لایبرری Picasso خیلی عمقی تر
جامعه جاوا (اندروید) ایجاد شده در ۱۶ بهمن ۱۳۹۸

این پست رو به دو جهت میذارم

1-شاید شما سریع بخواهید به اموزشی که استاد دادن دسترسی داشته باشین

2-یکمی عمقی‌تر این لایبرری رو اموزش بدیم.

پس برو تا بریم.

-----------------------------------------------------------

همونطور که میدونید این لایبرری یکی از بهترین و معروف‌ترین لایبرری‌های لود تصویر از حافظه گوشی و نت هستش که کار باهاش بسیار سادست .

کد گریدل :

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

برای لود کردن تصویر از نت روی ImageView از این کد میتونید استفاده کنید

 String imageUri = "ImageUrl"; // دادن آدرس تصویر در اینترنت
ImageView img = (ImageView) findViewById(R.img); // تعریف ایمیج ویو
Picasso.with(context).load(imageUri).into(img); // لود کردن تصویر روی ایمیج ویو

اما کار به اینجا ختم نمیشه شما میتونید کنترل بیشتری داشته باشین 

ممکنه تا زمانی که ایمیج میخواد لود شه بخواین یه تصویر دیگه نشون داده بشه تا اون که دانلود شد بیاد جای این تصویر اون تصویر جایگزینه رو بهش میگن place holder یا ممکنه بخواین اگه ارتباط با نت قطع شد یا تصویر دانلود نشد یه چیز دیگه جاش نشون داده بشه

همه اینا رو با Picasso میشه مدیریت کرد . این کد رو ببینید :

 Picasso.with(context).load(imageUri).fit().centerCrop()
    .placeholder(R.drawable.user_placeholder) // place holder تعیین
    .error(R.drawable.user_placeholder_error)  // تعیین تصویری که موقع ارور نشون داده بشه
    .into(imageView);

همینطور میتونید با متد noFade افکتی که خود پیکاسو ایجاد میکنه موقع لود تصویر غیر فعال کنید 

یکی دیگه از ویژگی‌های پیکاسو اینه که برای کم کردن اشغال مموری میتونید تصویر رو resize کنید . به این شکل :

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

ممکنه بخواید ارور‌ها رو مدیریت کنید و مثلا اگه تصویر لود نشد یه پیام نشون بدید به این شکل این کار انجام میشه :

 Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
builder.listener(new Picasso.Listener() {
     @Override
     public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
         exception.printStackTrace();
    });

شاید پیش بیاد بعد دانلود تصویر بخاین سایزشو عوض کنید برای اینکار اول یه Target تعریف میکنیم و بعد اون رو به عنوان تارگت به پیکاسو بدیم :

 private Target target = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {  
       // Bitmap is loaded, use image here
       imageView.setImageBitmap(bitmap);
    }
    @Override
    public void onBitmapFailed() {
        // Fires if bitmap couldn't be loaded.
    }
}
...
Picasso.with(this).load("url").into(target);

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

 Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);

نکته آخر این لایبرری قابلین کش کردن در گوشی شما هم داره.

امیدوارم مفید بوده باشه

سوالی بود کامنت کنید .

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

یه ذره ظاهرا ساختار  کد‌ها به هم ریخته و ظاهرا کامنت‌های فارسی به شکل مربع در اومدن که دنبال کردن کد رو یه ذره دشوار کرده 

مهرداد ۱۶ بهمن ۱۳۹۸، ۱۱:۰۹

سلام مهرداد جان من تست کردم مشکلی وجود نداشت 

هم با گوشی هم با مروگر موزیلا

مرورگر خودم کروم بتاست.

اگر تست کردی و مشکلی بود حتما بهم اطلاع بده.

پوریا شفیعی ۱۶ بهمن ۱۳۹۸، ۱۴:۰۱

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

فقط اینکه اون تغییر سایز با کلاس تارگت رو من متوجه نشدم .  سایز کجا تغییر داده میشه ؟

محمدصادق صرافیان ۰۵ خرداد ۱۳۹۹، ۰۸:۱۶

دورود دوباره آقا پوریا

 

شما در کد زیر بجای متد get() که استاد در آموزش استفاده کرده از متد with() استفاده کردی چرا و چه فرقی داره؟ مرسی

 

Picasso.with(context)
پژمان آزاد ۰۶ تیر ۱۳۹۹، ۱۶:۰۲