21

ビューページャーがあり、いくつかの情報が含まれていますが、ページを左から右にスワイプできますが、左から右にスワイプするにはどうすればよいですか?つまり、方向を変更できますか?

4

14 に答える 14

23

を使用して、現在のページを最後のページに設定できると思いますviewPager.setCurrentItem()。次に、左から右にスワイプします.. :)

于 2013-09-13T08:48:19.487 に答える
9

すでに両方向にスワイプできます。デフォルトでは 0 ページが表示されますが、次のように変更できます。

protected void onCreate(Bundle savedInstanceState) {
    // ...
    viewPager.setCurrentItem(myFragmentCount-1); 
    // ...
于 2013-09-13T08:49:19.660 に答える
5

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 の実装に関するいくつかの役立つリンク:

Android ドキュメント

サンプル

于 2019-05-19T11:18:45.570 に答える
4

それはopには関係ないと確信していますが、私にとってはうまくいく解決策を見つけました(私の場合、データの変更が問題だったので)。ビューページャーを Y 軸で 180 度回転させ、サブビューを 180 度回転させました。

android.view.View

public void setRotationY(float rotationY)

Android が rtl 言語に変更したときにすべての OS をミラーリングする方法に最も近いと思うので、それが誰かの役に立てば幸いです。

于 2016-06-04T00:34:46.147 に答える
3

私の解決策。動的に:

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);
            }
        }
    }
}
于 2016-05-04T11:51:46.323 に答える
3

あなたはこのようなことをすることができます、

ViewPager.setCurrentItem(lastposition);
于 2013-09-13T08:48:44.647 に答える
2

まず、クラスに OnPageChangeListener を実装し、次に viewpager.setOnPageChangeListener(yourclass.this); のようにビューページャーにリスナーを設定する必要があります。これがうまくいくことを願っています。

于 2013-09-13T08:57:14.200 に答える
1

レイアウト:

   <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
于 2019-12-18T10:03:00.880 に答える
0

質問が完全に答えられていることを完全に理解しています。ただし、RTL 言語を使用している場合。たとえば、ViewPager に表示したい本があるとします。次に、答えに加えて、ページをめくって正しいページを取得することも検討できます。getItem()そのためには、ViewPager アダプターのメソッドを変更します

@Override
public Fragment getItem(int position) {
    return SomeFragment.newInstance(N_PAGES - position - 1); // to filp the pages
}
于 2019-09-29T21:49:21.923 に答える