ViewPager2 (Android)

در این مقاله به بررسی ViewPager2 که نسخه آپدیت شده از ViewPager برای اندروید بوده می‌پردازیم .ViewPager2 In Androidتفاوت ViewPager2 با ViewPagerبر پایه RecyclerView هستمی‌تونه به صورت Vertical هم باشهساپورت RTLتغییرات Callback هااستفاده از ویژگی های Adapter در RecyclerView برای ViewPager2 مثل DiffUtil و ...پیاده سازیفرض بر اینه که قراره صفحاتی داشته باشیم که هر کدوم یک متن رو برای ما نشون بدن و این صفحات به صورت Pager نشون داده بشن ، با توجه به مواردی که بالا گفتم به این موارد نیاز داریم :لیستی از کلماتکلاس Adapter و ViewHolderبرای شروع از کلاس Adapter و ViewHolder کار رو آغاز می‌کنیم :PagerAdapter & VHنکته : در کاتلین زمانی که در تابعی صرفا می‌خواهیم یک مقدار رو return کنیم لزومی به نوشتن بدنه نیست و فقط باید اون تابع رو برابر مقداری که می‌خواهیم قرار بدیم ، مثل تابع getItemCount در کدِ بالاکارایی کد مشخصه ، یک لیستی از String ها گرفته و اون رو به TextView میده ، چیزی که قبلا هم در Adapter ها دیدیم ، حالا برای ViewPager اول در صفحه و layout اضافه می‌کنیم :ابتدا در gradle :implementation 'androidx.viewpager2:viewpager2:1.1.0-alpha01'سپس در layout :<androidx.viewpager2.widget.ViewPager2 android:id=&quot@+id/pager&quot android:layout_width=&quotmatch_parent&quot android:layout_height=&quotmatch_parent&quot/>اگه می‌خواید به صورت vertical باشه این خط رو هم باید اضافه کنید :android:orientation=&quotvertical&quotحالا خیلی راحت Adapter رو به ViewPager2 وصل می‌کنیم :یک راه دیگه هم برای پیاده سازی هست که دیگه نیازی به Adapter نیست و اون FragmentStateAdapter هست (کد مربوط به این تیکه در لینکِ گیتی که انتهای مقاله می‌ذارم نیست) ، در کد پایین ما لیستی از فرگمنت ها رو به ViewPager2 پاس دادیم :FragmentStateAdapter وصل کردن این Adapter به ViewPager2 مثل قبلی میشه و نکته جدیدی نداره .تغییرات صفحاتاما برای CallBack ها ، وقتی که می‌خوایم اسکرول شدن ViewPager2 رو بفهمیم :تابع rScrollStateChanged سه وضعیت رو برای ما نشون میده :Dragging : شروع به تکان دادن Settling : تنظیم بعد از اتمام تکان دادنIdle : بعد از تنظیم به حالت پایدار در آمدنتابع Scrolled در زمانی که در حال اسکرول هستیم مقادیری مثل محاسبات میزان تکون خوردن (offset) و صفحه ای که در حال نمایشه (لزوما ثابت نشده ، اگه شما در حال اسکرول به صفحه سمت چپ باشید به شما عددِ مربوط به صفحه سمت چپ نشون داده میشه اما اگه در حال اسکرول به صفحه سمت راست باشید ، عددِ مربوط به همون صفحه ای که الان توش هستید نشون داده می‌شه ، مثل تابع جزء صحیح) رو به ما می‌ده :و تابع Selected هم بعد از اینکه صفحه به حالت ثابت در اومد position مربوط به اون صفحه رو نشون می‌ده :برای اسکرول کردن در کد هم می‌تونید از تابع setCurrentItem استفاده کنید ، این تابع دو پارامتر داره که اولیش یک Int هست که position مربوط به اون صفحه است و دومی یک boolean (به صورت پیش‌فرش true) هست که مشخص کننده اینه که به صورت روان (smooth) اسکرول بشه یا یهویی !pager.setCurrentItem(2,false)اعمال انیمیشن ‌می‌تونید برای اسکرول کردن صفحات از انیمیشن استفاده کنید برای مثال انیمیشن fade :متغیر position برخلاف مثال‌های بالا مقدار Int نیست بلکه از مقداری اعشاری در بازه [1,-1) هست ، در این مثال مقدار آلفای صفحه برابر یک منهای قدرمطلقِ position حساب شده که باعث میشه هر چی صفحه به وسط نزدیک تر بشه آلفای بیشتری داشته باشه ، شما می‌تونید با دستکاری های مختلف مثل scale ، رنگ و ... صفحات زیبایی بسازید !می‌تونید کدهای مربوط به این مقاله در این قسمت مشاهد کنید : https://gitlab.com/drflakelorenzgerman/viewpager2sample من رو در لینکدین و اینستاگرام دنبال کنید ???