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

مقدمه ای بر کتابخانه Glide

Glide یک کتابخانه منبع عمومی برای بارگذاری و ذخیره سازی تصاویر اندروید می باشد که توسط bumptech توسعه داده شده است. این کتابخانه پر سرعت، کارآمد و به طور گسترده مورد استفاده قرار می گیرد و عمدتا بر روی مرور هموار متمرکز است. در بسیاری از برنامه های کاربردی اندروید مورد استفاده قرار گرفته و یکی از محبوب ترین کتابخانه ها برای بارگذاری و ذخیره سازی تصاویر است.
Glide حافظه نهان و ذخیره دیسک، ادغام منبع و کدگشایی رسانه را به یک روش ساده و برای استفاده از فصل مشترک تبدیل می کند. Glide انتقال، رمزگشایی، و نمایش تصاویر و عکس های متحرک را ممکن می سازد. ذخیره سازی دیسک Glide بطرز شگفت انگیزی عمل می کند.
اگرچه Glide اصولا برای تصاویر مورد استفاده قرار می گیرد، اما همچنین می تواند برای بارگذاری انواع فایل های رسانه ای مانند ویدئو و تصاویر متحرک انیمیشنی نیز بکار رود. Glide با فراهم کردن پشتیبانی برای بسیاری از منابع مانند نشانی های اینترنتی راه دور، سیستم فایل محلی و غیره انعطاف پذیری در بارگذاری تصاویر را فراهم می کند.
Glide روش پیاده سازی خاص خود را دارد که تصاویر از نشانی های اینترنتی راه دور را بر روی شبکه کنترل می کند. فرآیند بارگیری آن ساده و کارآمد است و همچنین امکان ذخیره سازی تصاویر بارگزاری شده را فراهم می کند.

بیشتر بخوانید:

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

عملکرد Glide

همانطور که در مستندات Glide بیان شد، این کتابخانه به طور عمده بر روی عملکرد دو پارامتر زیر تمرکز دارد:

  • سرعت رمزگشایی تصویر.
  • جداسازی روان تصاویر بدون اشتباه

ذخیره سازی Glide

این برنامه یک مکانیزم حافظه نهان کارآمد دارد که قبل از درخواست یک منبع جدید، لایه های چندگانه مانند موارد زیر را بررسی میکند.

  • منابع فعال
  • ذخایر نهان حافظه
  • رمز گشایی منابع موجود و تاریخچه های متغیر
  • حافظه نهان دیسک داده

اجازه دهید نمونه ای از گالری تصویر اندروید با استفاده از کتابخانه Glide بسازیم و ببینیم که چگونه کار می کند.

برنامه نمونه گالری تصویر اندروید

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

ایجاد یک پروژه جدید در اندروید استودیو
قبل از این که شروع به ساختن گالری تصویر اندروید کنیم، باید کتابخانه ها را به ماژول build.gradle اضافه کنیم. به recyclerview و glide نیاز داریم، بنابراین وابستگی های مربوطه را در ماژول برنامه gradle اضافه کردیم.

بیشتر بخوانید:

آموزش افزودن کتابخانه به اندروید استودیو

AndroidManifest.xml
تصاویر مورد نیاز این گالری تصویر اندروید از طریق شبکه بارگذاری خواهند شد. Glide تصاویر را به طور یکپارچه بارگذاری و ذخیره سازی می کند. در این مثال، ما تصاویر را مستقیما از اینترنت بارگذاری می کنیم پس این برنامه نیاز به دسترسی به اینترنت دارد.

باید مجوزهای اینترنت را در فایل مانیفست برنامه ذکر کنیم. بعد از اضافه کردن مجوز دسترسی به اینترنت، پرونده به شکل زیر به نظر خواهد رسید.

 

حالا اجازه دهید فایل لایوت اصلی را برای برنامه مان ایجاد کنیم. ما از RecyclerView برای نمایش تصاویر گالری استفاده خواهیم کرد و آن برای تمام تصاویر به عنوان یک ظرف عمل خواهد کرد.

activity_main.xml
در فایل لایوت اصلی باید یک ویجت recyclerView اضافه کنیم.

در اینجا نیاز داریم لایوت دیگری بسازیم که imageview را به آن اضافه کنیم. این کار برای نشان دادن تصاویر تکی در گالری به کار می رود.

image_layout.xml
این لایوت یک imageview دارد که در آن تصاویر را از طریق نشانی اینترنتی بارگذاری خواهیم کرد.

ImageUrl.java
حالا ما به یک دامنه نیاز داریم که شامل داده های اولیه حاوی نشانی اینترنتی تصاویر باشد. از یک POJO یا همان getter/setter در کلاس آداپتور برای تنظیم آدرس فردی تصویر استفاده می شود. نشانی اینترنتی توسط برنامه Glide برای نمایش تصاویر بصورت تکی در گالری تصویر احضار خواهد شد.

DataAdapter.java
کلاس آداپتور برای رندر و جمع آوری داده ها استفاده می شود و آنها را به ویو مرتبط می کند. این جایی است که کتابخانه Glide وارد صحنه می شود. تمام کاری که ما انجام دهیم این است که یک خط برای بارگذاری کردن و نمایش تصویر در گالری تعریف کنیم. Glide همه تنظیمات پیچیده را برای شما انجام می دهد.
DataAdapter یک کلاس آداپتور معمولی است که بخش دامنه را مدیریت می کند. باید بر روی متد onBindViewHolder تمرکز کنید و این همان جایی است که ما از لایبرری Glide برای بارگذاری تصویر استفاده می کنیم. این کتابخانه نشانی اینترنتی تصویر را دریافت کرده و تصویر را بطور تاثیرگذاری از شبکه بارگذاری می کند.

 

اکتیویتی اصلی گالری تصویر اندروید
بیایید درباره اکتیویتی های اصلی اندروید صحبت کنیم. در اینجا از GridLayoutManager و RecyclerVeiw برای نمایش گالری تصویر استفاده کرده ایم. از RecyclerView.LayoutManager برای پیاده سازی گزینه های موجود در گرید ویو استفاده می شود.

در این قسمت با تهیه لیستی از نشانی اینترنتی، نصب های استاندارد را انجام می دهیم. ما یک ArrayList حاوی نشانی های اینترنتی تصاویر ایجاد خواهیم کرد این داده ها به DataAdapter منتقل می شود تا با UI مرتبط شود.

ایجاد یک گالری تصویر اندروید به یک کار ساده تبدیل می شود چرا که کتابخانه Glide تمام کارهای سخت را انجام می دهد و تمام پیچیدگی بارگذاری و ذخیره کردن تصاویر را کوتاه می کند. بعد از اجرا، برنامه ما به این شکل خواهد بود.

بارگذاری و ذخیره کردن تصاویر با استفاده از کتابخانه glide

لود کردن از Resource ها

برای لود کردن عکسی که جزو منابع (Resource) های برنامه است، به جای دادن URL به Glide کافی است شناسه عکس را به Glide بدهیم:

ممکن است بگویید که این کار با ImageView هم امکان‌پذیر است. فایده انجام این کار با Glide در امکانات پیشرفته Glide است که در ادامه مطلب با آن‌ها آشنا خواهید شد.

لود کردن از فایل

در Glide می‌توان عکس را از فایل لود کرد. فایده این کار برای وقتی است که کاربر مثلاً عکس را از فایل اکسپلورر یا گالری لود می‌کند. برای این کار باید یک شیء File به Glide بدهیم:

استفاده از جانگهدار یا placeholder

قبل از این که عکس لود شود ImageView ای که قرار است عکس در آن نمایش داده شود، خالی است. این موضوع از نظر طراحی اصلاً مطلوب نیست. بهتر است ابتدا یک عکس در آن نمایش داده شود تا کاربر بداند که در این محل تصویری قرار است نمایش داده شود. برای این کار در Glide از متد placeholder استفاده می‌شود. کافی است شناسه تصویر موقت یا یک شیء drawable را به این متد بدهید:

تغییر دادن آرام عکس‌ها

اگر از یک placeholder یا جانگهدار استفاده می‌کنید، بعد از لود شدن تصویر، این جانگهدار باید جای خود را به تصویر اصلی بدهد. اگر این فرایند ناگهانی باشد، ممکن است باعث چشم‌آزار شدن برنامه بشود. اگر بخواهیم این فرایند جایگزینی تصویر به جای جانگهدار آرام و به صورت محو باشد، از متد crossfade (به معنی محو شدگی) استفاده می‌کنیم:

اگر بخواهیم مدت زمان این محو شدگی و انتقال را (که به صورت پیش‌فرض ۳۰۰ هزارم ثانیه است) تغییر دهیم، باید زمان مطلوب را به هزارم ثانیه به این متد بدهیم. در نسخه‌های آخر Glide این محوشدگی به صورت پیش‌فرض فعال است.

تغییر دادن بلادرنگ تصویر

اگر بخواهیم تصویر لود شده بدون محوشدگی سریعاً و بلادرنگ جایگزین جانگهدار (placeholder) بشود (بر عکس حالت قبل) کافی است متد dontAnimate را فراخوانی کنیم:

تغییر اندازه عکس

برای صرفه‌جویی در منابع اینترنتی و نیز منابع سخت‌افزاری، بهترین کار این است که سرور عکس را در اندازه مورد نیاز برنامه ارسال کند. اگر به هر دلیلی خواستید اندازه عکس را قبل از نمایش تغییر بدهید، کافی است از متد override استفاده کنید و اندازه افقی و عمودی عکس را به پیکسل به این متد بدهید:


توجه کنید که اندازه به پیکسل هستند و نه dip یا dp.

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

تغییر اندازه عکس با حفظ نسبت‌های طول و عرض

همانطور که دیدید متد override نسبت‌های عکس را حفظ نمی‌کند و این موضوع ممکن است باعث زشت شدن عکس شود. اگر بخواهید اندازه عکس را بدون بر هم خوردن نسبت‌های آن تغییر دهید، Glide دو متد دیگر در اختیار شما می‌گذارد:

CenterCrop

یک تکنیک تغییر اندازه عکس است. در این روش با استفاده از یک الگوریتم ساده اندازه عکس به گونه‌ای تغییر می‌کند که عکس تمام فضایی که برایش در نظر گرفته شده است را پر می‌کند ولی نسبت طول و ارتفاع آن تغییر نمی‌کند. در این روش ممکن است بخش‌هایی از عکس بریده شده و نمایش داده نشود.

علت اصلی این است که نسبت‌های عکس با نسبت‌های ImageView ای که قرار است آن را نمایش دهد یکی نیست. اگر این نسبت‌ها برابر باشد (مثلاً نسبت ۱:۱) همه تصویر در ImageView دیده خواهد شد و چیزی از تصویر بریده نمی‌شود.

تصویر زیر اتفاقی که در centerCrop رخ می‌دهد را نشان می‌دهد:

CenterCrop

برای استفاده از این تکنیک کافی است متد centerCrop را فراخوانی کنیم:

FitCenter

در این روش تغییر اندازه تصویر، نسبت تصویر بدون تغییر می‌ماند ولی به اندازه‌ای عکس کوچک می‌شود که کل عکس در ImageView نمایش داده شود. در این حالت ممکن است عکس کل فضای ImageView را پر نکند.

تصویر زیر اتفاقی که در fitCenter رخ می‌دهد را نشان می‌دهد:

FitCenter

برای استفاده از روش کافی است متد fitCenter را فراخوانی کنید:

نمایش تصویر Gif

اندروید به صورت پیش‌فرض از تصاویر گیف یا Gif پشتیبانی نمی‌کند. اما همانطور که این روزها در پیام‌رسان‌ها می‌بینید، گیف به یکی از کاربردی‌ترین فرمت‌ها تبدیل شده است و همه این برنامه‌ها می‌توانند Gif را پشتیبانی کنند. یکی از امکانات فوق‌العاده کتابخانه Glide توانایی نمایش دادن عکس‌های به فرمت گیف است.

اگر مطمئن هستید که عکسی که می‌خواهید نمایش دهید یک فایل گیف است، برای دانلود و نمایش آن نیاز به کار اضافه‌ای ندارید و به صورت عادی از Glide استفاده می‌کنید:

به همین سادگی! Glide تصویر گیف را دانلود کرده و پس از اتمام دانلود شروع می‌کند به پخش کردن. یکی از خوبی‌های Glide این است که هیچ تمایزی بین عکس‌های عادی و گیف نمی‌گذارد و همه متدهای آن برای این فرمت هم کار می‌کند:

یکی از مسائلی که در این حالت پیش می‌آید این است که شما انتظار دارید تصویر حتماً گیف باشد. ولی همان طور که می‌بینید Glide هیچ تفاوتی بین گیف و عکس عادی نمی‌گذارد. برای مجبور کردن Glide به این که فایل دریافتی را حتماً چک کند تا از گیف بودن آن مطمئن شود، متد asGif است. اگر عکس دریافتی گیف نباشد این تابع خطا می‌دهد:

مواقع بسیاری هم هست که شما لیستی از تصاویر دارید که در میان آن‌ها هم تصاویر عادی هست و هم تصاویر گیف و شما نمی‌خواهید تصاویر گیف به صورت خودکار شروع کنند به پخش شدن. در عوض می‌‌خواهید یک فریم عادی از تصویر را نشان دهید. در این حالت از متد asBitmap استفاده می‌کنید. این متد باعث می‌شود که اگر تصویر دریافتی گیف باشد Glide فریم اول آن را نشان دهد و تصویر به صورت فیلم پخش نمی‌شود. استفاده از این تابع هم بسیار ساده است:

تصویر انگشتی

تصویر انگشتی یا thumbnail نسخه کوچکتر تصویر اصلی است. فرض کنید در یک لیست عکس‌ها را در اندازه ۲۵۰ * ۲۵۰ نمایش می‌دهید ولی در صفحه نمایش جزئیات عکس را در ابعاد بزرگتر مثلاً ۱۰۰۰ * ۱۰۰۰ نمایش دهید. کاربر انتظار دارد به محض این که روی آیتم لیست کلیک می‌کند عکس را ببیند. Glide این امکان را فراهم می‌کند تا بتوان یک نسخه انگشتی از عکس را سریعاً به کاربر نشان داد. می‌توانید نسبت عکس انگشتی به عکس اصلی را به Glide بدهید و بعد همه کارها را Glide برای شما انجام می‌دهد:

مقداری که به متد thumbnail می‌دهیم نسبت عکس انگشتی به عکس اصلی است.

اولویت دادن به درخواست‌ها

یکی از امکانات بسیار ارزشمند Glide این است که می‌توانید برای دانلود عکس‌ها اولویت تعیین کنید. مثلاً فرض کنید می‌خواهید مشخصات یک کالا و نظر کاربران درباره آن را در برنامه نشان بدهید. تبعاً دانلود عکس پروفایل کاربران اولویت پایین‌تری از عکس خود محصول دارد. قطعاً می‌خواهیم عکس محصول بلافاصله دانلود شده و نمایش داده شود و پس از آن به سراغ عکس پروفایل کاربران برویم. Glide چهار اولویت تعریف کرده است:

  • Prority.IMMEDIATE
  • Priority.HIGH
  • Priority.NORMAL
  • Priority.LOW

البته توچه داشته باشید که این اولویت‌ها فقط یک راهنما برای Glide هستند و Glide سعی می‌کند با در نظر گرفتن آن‌ها بهترین سرعت ممکن در لود کردن تصاویر را داشته باشد اما این اولویت‌ها به هیچ وجه تضمین نمی‌کند که عکس‌ها طبق ترتیبی که اولویت مشخص کرده است لود شوند.

بیشتر بخوانید:

بهترین کتابخانه های اندروید، مورد نیاز توسعه دهندگان

نتیجه گیری
در این پست آموزشی، دیدیم که چگونه میتوانیم از کتابخانه Glide برای بارگذاری و نمایش مجموعه ای از تصاویر در یک گالری تصویر استفاده کنیم. تصاویر از اینترنت بارگذاری می شوند و ما دسترسی به اینترنت را برای برنامه ایجاد کردیم. تمام کارهای پیچیده بارگذاری و جابجایی تصاویر توسط Glide انجام شده است و لازم نیست ما کار زیادی در این زمینه انجام دهیم. در واقع، ما تنها یک خط کد را در data adapter نوشتیم تا از نشانی اینترنتی تصویر عبور کرده و از API کتابخانه Glide استفاده کنیم. بنابراین ایجاد یک گالری تصویر اندروید با استفاده از کتابخانه Glide کاری بسیار ساده است.

این خبر را به اشتراک بگذارید :