ビューページャーがあり、いくつかの情報が含まれていますが、ページを左から右にスワイプできますが、左から右にスワイプするにはどうすればよいですか?つまり、方向を変更できますか?
14 に答える
を使用して、現在のページを最後のページに設定できると思いますviewPager.setCurrentItem()
。次に、左から右にスワイプします.. :)
すでに両方向にスワイプできます。デフォルトでは 0 ページが表示されますが、次のように変更できます。
protected void onCreate(Bundle savedInstanceState) {
// ...
viewPager.setCurrentItem(myFragmentCount-1);
// ...
API28 以降をサポートしている場合は、ViewPager で回転を使用しないでください。Android パイで ViewPager のスワイプが難しくなりすぎるためです。この質問を参照してください。このライブラリは、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"
/>
アップデート
ViewPager2 はロケール フレンドリーであるため、現在のデバイス ロケールに応じてスワイプ方向が自動的に変更されます。
ViewPager2 の実装に関するいくつかの役立つリンク:
それはopには関係ないと確信していますが、私にとってはうまくいく解決策を見つけました(私の場合、データの変更が問題だったので)。ビューページャーを Y 軸で 180 度回転させ、サブビューを 180 度回転させました。
android.view.View
public void setRotationY(float rotationY)
Android が rtl 言語に変更したときにすべての OS をミラーリングする方法に最も近いと思うので、それが誰かの役に立てば幸いです。
私の解決策。動的に:
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);
}
}
}
}
あなたはこのようなことをすることができます、
ViewPager.setCurrentItem(lastposition);
まず、クラスに OnPageChangeListener を実装し、次に viewpager.setOnPageChangeListener(yourclass.this); のようにビューページャーにリスナーを設定する必要があります。これがうまくいくことを願っています。
レイアウト:
<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
質問が完全に答えられていることを完全に理解しています。ただし、RTL 言語を使用している場合。たとえば、ViewPager に表示したい本があるとします。次に、答えに加えて、ページをめくって正しいページを取得することも検討できます。getItem()
そのためには、ViewPager アダプターのメソッドを変更します
@Override
public Fragment getItem(int position) {
return SomeFragment.newInstance(N_PAGES - position - 1); // to filp the pages
}