حل مشکل برعکس شدن swipe direction در ViewPager در طراحی‌های RTL اندروید

در این مطلب قصد دارم تا یک راهکار کوتاه و عملی برای حل مشکل تغییر swipe direction در ViewPager در طراحی‌های RTL اندروید را به اشتراک بگذارم.

چنانچه اپلیکیشن اندرویدی شما از طراحی راست‌چین یا RTL ساپورت می‌کند (با افزودن android:supportsRtl="true" به فایل مانیفست پروژه)، احتمالا هنگام استفاده از ViewPager متوجه عملکرد ناصحیح عمل swipe در جابه‌جایی میان pageهای ViewPager شده‌اید، به طوری که با کشیدن انگشت از سمت چپ به سمت راست، از page با پوزیشن N به page با پوزیشن N - 1، و با کشیدن انگشت از سمت راست به سمت چپ، از page با پوزیشن N به page با پوزیشن N + 1 تغییر می‌یابد. این در حالی است که در حالت دیفالت و عملکرد طبیعی عمل swipe، می‌بایست با کشیدن انگشت از سمت چپ به سمت راست، از page با پوزیشن N به page با پوزیشن N + 1، و با کشیدن انگشت از سمت راست به سمت چپ، از page با پوزیشن N به page با پوزیشن N - 1 تغییر یابد. یعنی جهت تغییر pageها و پوزیشن می‌بایست برعکس جهت کشیدن انگشت بر روی ViewPager عمل کند. رفتاری که در طراحی‌های LTR به درستی نمایان شده و تنها در طراحی‌های RTL به مشکل برمی‌خورد. براساس مباحث مطرح شده در وب‌سایت‌هایی همچون stackoverflow، این مشکل در واقع یک باگ برای این Layout Manager محسوب می‌گردد.

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

قدم اول:

viewPager.setRotationY(180);


قدم دوم (در متد instantiateItem از PagerAdapter قبل از دستور return view):

view.setRotationY(-180);