viewpager2 уменьшит чувствительность горизонтальной прокрутки - PullRequest
1 голос
/ 12 марта 2020

как я могу уменьшить чувствительность горизонтальной прокрутки в viewpager2?

в настоящее время это мой код для viewpager.

viewPager = findViewById(id.view_pager);
viewPager.setAdapter(new ViewPagerAdapter(this, dataManager, USERNAME));
tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.green));
new TabLayoutMediator(tabLayout, viewPager,
        new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                tab.setText(tabNames.get(position));
            }
        }).attach();

1 Ответ

0 голосов
/ 13 марта 2020

Я искал то же самое и нашел это решение в Kotlin:

val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
recyclerViewField.isAccessible = true
val recyclerView = recyclerViewField.get(this) as RecyclerView

val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
touchSlopField.isAccessible = true
val touchSlop = touchSlopField.get(recyclerView) as Int
touchSlopField.set(recyclerView, touchSlop*8)       // "8" was obtained experimentally

Если вам нужно Java, оно должно быть примерно таким:

try {
    Field recyclerViewField = ViewPager2.class.getDeclaredField("mRecyclerView");
    recyclerViewField.setAccessible(true);

    RecyclerView recyclerView = (RecyclerView) recyclerViewField.get(myViewPager);

    Field touchSlopField = RecyclerView.class.getDeclaredField("mTouchSlop");
    touchSlopField.setAccessible(true);

    int touchSlop = (int) touchSlopField.get(recyclerView);
    touchSlopField.set(recyclerView, touchSlop * 8);
} catch (NoSuchFieldException | IllegalAccessException e) {
    e.printStackTrace();
}

Это не «хорошее» решение, потому что оно использует API отражения, но оно должно помочь.

...