如何让我的viewpager从右向左滑动

时间:2013-09-13 08:43:04

标签: android android-viewpager

我有一个viewpager,它包含一些信息,但它允许我从左向右滑动页面如何从左向右滑动,这意味着改变它的方向?

14 个答案:

答案 0 :(得分:21)

我认为您可以使用viewPager.setCurrentItem()将当前页面设置为最后一页。然后它会从左向右滑动.. :))

答案 1 :(得分:11)

更改Viewpager的滑动方向是一种非常简单的技术。

有两个简单的步骤必须跟随你,

1。更改View寻呼机的旋转,

viewpager.setRotationY(180);

2. 然后再次更改作为viewpager子项的片段容器的方向,

recyclerView.setRotationY(180);

注意:在我的情况下,我使用了recyclerview作为视图寻呼机的子项。

这是100%为我工作。

答案 2 :(得分:9)

您可以双向滑动。默认情况下,它显示页面零,但您可以更改:

protected void onCreate(Bundle savedInstanceState) {
    // ...
    viewPager.setCurrentItem(myFragmentCount-1); 
    // ...

答案 3 :(得分:4)

我确定它与操作系统无关,但我找到了一个适合我的解决方案(因为修改数据对我来说是一个问题)。 我只是将viewpager在Y轴上旋转180度,然后在180度再次旋转它的子视图。

android.view.View

public void setRotationY(float rotationY)

希望它对任何人都有所帮助,因为我认为这是最接近于在更改为rtl语言时Android镜像所有操作系统的方式。

答案 4 :(得分:3)

你可以这样做,

ViewPager.setCurrentItem(lastposition);

答案 5 :(得分:2)

首先,你需要在你的类中实现OnPageChangeListener 第二个将监听器设置为你的viewpager  viewpager.setOnPageChangeListener(yourclass.this); 希望这会奏效。

答案 6 :(得分:2)

我的解决方案。动态:

public class RTLViewPager extends ViewPager {

    public RTLViewPager(Context context) {
        super(context);
    }

    public RTLViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setAdapter(PagerAdapter adapter) {
        super.setAdapter(adapter);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            if(getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL){
                setCurrentItem(adapter.getCount()-1);
            }
        }
    }
}

答案 7 :(得分:1)

我知道这个问题很旧,但这是我的看法:

为了使您的viewpager滑动RTL,无论它内部是否有片段或视图,您都需要执行以下操作

步骤1: 定义一个整数: ServiceInstance: Type: "AWS::EC2::Instance" Properties: InstanceType: !Ref InstanceType IamInstanceProfile: !Ref InstanceProfile UserData: 'Fn::Base64': !Sub | #cloud-config write_files: - path: /etc/sysconfig/cloudformation permissions: 0644 owner: root content: | STACK_NAME=${AWS::StackName} AWS_REGION=${AWS::Region} runcmd: - aws s3 cp s3://${ArtifactsBucketName}/dd-get-secrets.py /home/ec2-user/dd-get-secrets.py InstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: / Roles: [!Ref IAMRole] IAMRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: [ec2.amazonaws.com] Action: ['sts:AssumeRole'] Path: / Policies: - PolicyName: allow-downloading-dd-templates PolicyDocument: Statement: - Effect: Allow Action: - s3:GetObject - s3:ListBucket Resource: !Sub "arn:aws:s3:::${ArtifactsBucketName}/*"

对于R.integer.angle_rotation_for_rtl,它是values

对于0,它是values-rtl

步骤2:

180

步骤3:

viewPager.setRotationY(getResources().getInteger(R.integer.angle_rotation_for_rtl)); 

结果-顺利运行的viewpager,没有多余的ifs

答案 8 :(得分:0)

为了让您的水平ViewPager在LayoutDirection更改时表现得像RecyclerView,只需将此方法添加到自定义ViewPager中;

public class LoopViewPager extends ViewPager {
....
...
    public void setLayoutDirection(int layoutDirection) {
        if(layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
            setRotationY(0);
        }
        else if(layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) {
            setRotationY(180);
    }
}

你使用viewPager的地方就像这样动态设置它;

viewPager.setLayoutDirection(context.getResources().getConfiguration().getLayoutDirection());

答案 9 :(得分:0)

如果您支持API28及更高版本,请不要与ViewPager一起使用旋转功能,因为这会使ViewPager在Android Pie上滑动太困难,请参见此问题setRotationY(180) on recyclerview or viewpager creating scroll issue in Android 9(API 28)。 该库帮助我实现了RTL ViewPager https://github.com/duolingo/rtl-viewpager

将其添加到依赖项中,只需确保将layoutDirection =“ locale”添加到RtlViewPager

<com.duolingo.open.rtlviewpager.RtlViewPager
        android:layoutDirection="locale"
        android:keepScreenOn="true"
        android:id="@+id/quranViewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
     />

答案 10 :(得分:0)

我完全理解这个问题可以完美地回答;但是,如果您使用的是RTL语言;例如,如果有一本书要在ViewPager中显示;然后除了答案外,您还可以考虑将页面翻过来以获得正确的页面;修改ViewPager适配器的getItem()方法

@Override
public Fragment getItem(int position) {
    return SomeFragment.newInstance(N_PAGES - position - 1); // to filp the pages
}

答案 11 :(得分:0)

在布局中:

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layoutDirection="rtl">
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layoutDirection="locale"/>
    </LinearLayout>

使用代码:

  //region swipe right to left
        pager.setRotationY(180);
        pager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(@NonNull View page, float position) {
                page.setRotationY(180);

            }
        });
  //endregion

答案 12 :(得分:0)

您没有任何第三方库。 Android最近添加了一个名为ViewPager2的新UI组件,该组件支持RTL View Pager。

https://developer.android.com/jetpack/androidx/releases/viewpager2

请在下面找到答案的链接。答案讨论了迁移指南和示例github应用程序以支持RTL视图分页器。

https://stackoverflow.com/a/59558911/651377

答案 13 :(得分:0)

如果你想从左向右移动 -> viewPager.setCurrentItem(viewPager.currentItem+1,true)//传递布尔值来平滑滚动 如果您想从右向左移动 -> viewPager.setCurrentItem(viewPager.currentItem-1)//没有平滑滚动