我有一个viewpager,它包含一些信息,但它允许我从左向右滑动页面如何从左向右滑动,这意味着改变它的方向?
答案 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视图分页器。
答案 13 :(得分:0)
如果你想从左向右移动 -> viewPager.setCurrentItem(viewPager.currentItem+1,true)
//传递布尔值来平滑滚动
如果您想从右向左移动 ->
viewPager.setCurrentItem(viewPager.currentItem-1)
//没有平滑滚动