android - 如何反转 viewpager 滑动

标签 android android-fragments android-viewpager android-tablayout swipe-gesture

所以我的应用程序处于 RTL 模式,因此,选项卡现在从右到左排序......!

..但是我在tabs之间滑动滑动的时候,违背了常识,所以我想反转一下..!看图看问题..!

我想要的是..! > 当我在 Tab1 中然后从左向右滑动时我希望它滑到 Tab 2 等等......!

这可能……!?

enter image description here

代码


我的客户 ViewPager

public class CustomViewPager extends android.support.v4.view.ViewPager{
private boolean enabled;

public CustomViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.enabled = true;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onTouchEvent(event);
    }

    return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onInterceptTouchEvent(event);
    }

    return false;
}

public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
 }
 }

我的 TabActivity(助手类)

  public class TabbedActivity extends BaseActivity { 

 //I extend BaseActivity to avoid repeating UI code like toolbar and stuff..

protected CustomViewPager viewPager;
public OrdersAdapter adapter;
public TabLayout tabs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    tabs.setTabGravity(TabLayout.GRAVITY_FILL);
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs));


    tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            setTabSelected(tab);
        }


        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
  }


public void setTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

public void addTab(int title) {

    tabs.addTab(tabs.newTab().setText(getString(title)));

}

}

我的 Activity 包含 Tablayout 并具有三个 fragment ,每个 fragment 一个。

public class MyOrders extends TabbedActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_orders);

    tabs = (TabLayout) findViewById(R.id.tab_layout);
    addTab(R.string.NewOrderTabTitle); //tab1
    addTab(R.string.MyOrderTabTitle); // tab2
    addTab(R.string.FinOrderTabTitle); //tab3

     adapter = new OrdersAdapter(getSupportFragmentManager(), tabs.getTabCount());
    viewPager = (CustomViewPager) findViewById(R.id.pager);
    viewPager.setPagingEnabled(true);

    tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    super.onCreate(savedInstanceState);


 }
}

更新


@regev avraham

adding the tabs in the reverse order, and then use viewPager.setCurrentItem(adapter.getCount() - 1); to select the last tab.

根据您的评论,这是我在具有 tablayout 的 Activity 中所做的

 //code...
 tabs = (TabLayout) findViewById(R.id.tab_layout);
    addTab(R.string.FinOrderTabTitle); //tab3
    addTab(R.string.MyOrderTabTitle); // tab2
    addTab(R.string.NewOrderTabTitle); //tab1
 //code...

 viewPager.setCurrentItem(adapter.getCount() - 1);

最佳答案

你可以查看这个库

https://github.com/diego-gomez-olvera/RtlViewPager

并实现如下

dependencies {
...
compile 'com.booking:rtlviewpager:1.0.1'
}

just add this instead of Viewpager

<com.booking.rtlviewpager.RtlViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

关于android - 如何反转 viewpager 滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43952926/

相关文章:

android - 找不到 com.teslacoilsw.notifier 的提供商信息

java - RecyclerView 与 ImageView 以及不同的 Activity

java - 如何在 ViewPager 中使用 Fragments 隐藏和显示 FloatingActionButton?

android - Fragment 的 onCreate 和 onCreateView 没有被调用

android - 当我第二次打开父 fragment 时,我的 Viewpager 崩溃了

android - 错误 : Parsing the package while installing APK

android - 为什么我的 Android Studio (Kotlin) 在 Preview 中显示了 Android 手机的布局,但在 Build App 中却没有?

java - android 无法添加Fragment

android - 在 Viewpager 中获取当前选中项的 subview

android ViewPager可定制