آموزش لایبرری Picasso خیلی عمقی تر

پرسیده شده
فعالیت 1401 روز پیش
دیده شده 1118 بار
7

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

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);

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

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

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

فایل پیوست

پوریا شفیعی
پوریا شفیعی

16 بهمن 98

1
حذف شده

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

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

فایل پیوست

مهرداد

توسط

مهرداد

16 بهمن 98

4
حذف شده

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

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

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

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

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

16 بهمن 98

حذف شده
اره با کروم کامنت ها درست نمایش داده شدند ظاهرا مشکل خوده snippet هست با vivaldi مشکل داره اما کدها نشدند مثلا( onBitmapLoaded(android.graphics.Bitmap bitmap, Picasso.LoadedFrom from به جای یه خط تو شش خط نشون داده شده
مهرداد

16 بهمن 98

حذف شده
حتما درستش میکنم بخش ویرایش بیاد امروز فردا
پوریا شفیعی

17 بهمن 98

حذف شده
و فاصله (تب) بندی‌های اول خطوط درست رعایت نشدند. بعضی از خطوط رو باید کلی دقت کنی تا بفهمی داخل بلوک هستند یا خارج بلوک نوشته شدند.
Mohammad Golkar

22 فروردین 00

1
حذف شده

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

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

فایل پیوست

محمدصادق صرافیان

توسط

محمدصادق صرافیان

5 خرداد 99

2
حذف شده

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

 

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

 

Picasso.with(context)
فایل پیوست

پژمان آزاد

توسط

پژمان آزاد

6 تیر 99

حذف شده
سلام تو نسخه های قبلی این library از متد ()with استفاده میشد که تو نسخه جدید تغییرش دادند به متد ()get و در جواب به قسمت دوم سوال باید گفت که فرق خاصی ندارند و هر دو یک instance از کلاس Picasso میگیرند.
Hamidreza Kermani

19 شهریور 99