スワイプを示すために、ViewPagerの上に左矢印と右矢印を表示したいと思います。
2つのImageButtonをViewPager要素の上に追加しましたが、それらの領域はViewPagerが「スワイプ」をトリガーするのをブロックします。
また、これらの矢印を押してフラグメントをトリガーし、それに応じて変化させます。
つまり、ImageButtonはスワイプを妨げるべきではありませんが、押すことを登録する必要があります。
どうすればこれを達成できますか?ありがとう!
私は解決策を見つけました。とても簡単です。
矢印の表示にImageButtonsを使用する代わりに、ImageViewsを使用します。これは、タッチイベントを下のレイヤーに渡すためです。
次に、代わりにフラグメント自体に透明なボタンを配置します。これにより、ViewPagersのスワイプ動作はブロックされませんが、onClickイベントが発生します。
以下のコードは完全にうまく機能しました。 注:重複するビューを許可するため、FrameLayoutを使用してください
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="wrap_content"
Android:layout_height="200dp" />
<ImageButton
Android:id="@+id/left_nav"
Android:layout_width="48dp"
Android:layout_height="48dp"
Android:layout_gravity="center_vertical|left"
Android:src="@drawable/ic_chevron_left_black_24dp" />
<ImageButton
Android:id="@+id/right_nav"
Android:layout_width="48dp"
Android:layout_height="48dp"
Android:layout_gravity="center_vertical|right"
Android:src="@drawable/ic_chevron_right_black_24dp" />
</FrameLayout>
ImageButtonのクリックイベントを処理するために使用した次の部分
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
leftNav = (ImageButton) view.findViewById(R.id.left_nav);
rightNav = (ImageButton) view.findViewById(R.id.right_nav);
// Images left navigation
leftNav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int tab = viewPager.getCurrentItem();
if (tab > 0) {
tab--;
viewPager.setCurrentItem(tab);
} else if (tab == 0) {
viewPager.setCurrentItem(tab);
}
}
});
// Images right navigatin
rightNav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int tab = viewPager.getCurrentItem();
tab++;
viewPager.setCurrentItem(tab);
}
});
出力
このために現在のインデックスを管理したり、スワイプを手動で処理したりする必要はありません。左矢印と右矢印のクリックイベントでメソッドviewPager.arrowScroll(int direction)
メソッドを呼び出すだけです。
簡単に言えば、次の2つの簡単な手順に従います。
それらをクリックすると、呼び出します:
a)左矢印がクリックされた場合-viewPager.arrowScroll(View.FOCUS_LEFT);
b)右矢印がクリックされた場合-viewPager.arrowScroll(View.FOCUS_RIGHT);
フラグメントに左矢印ボタンと右矢印ボタンを実装します。次に、アクティビティにonClickを登録し、viewpagerのarrowScrollメソッドを呼び出して、viewPagerをプログラムでスクロールします。
public void onRightClick(View view) {
viewPager.arrowScroll(ViewPager.FOCUS_RIGHT);
}
public void onLeftClick(View view) {
viewPager.arrowScroll(ViewPager.FOCUS_LEFT);
}
フラグメントの左矢印/右矢印の表示を切り替えるメソッドを作成します。
public void toggleArrowVisibility(boolean isAtZeroIndex, boolean isAtLastIndex) {
if(isAtZeroIndex)
leftBtn.setVisibility(View.INVISIBLE);
else
leftBtn.setVisibility(View.VISIBLE);
if(isAtLastIndex)
rightBtn.setVisibility(View.INVISIBLE);
else
rightBtn.setVisibility(View.VISIBLE);
}
次に、ViewPager.OnPageChangeListenerをアクティビティに実装します。 SmartFragmentStatePagerAdapter を使用して、メモリに登録されたフラグメントを追跡します。
@Override
public void onPageSelected(int position) {
MyFragment fragment = (MyFragment) smartAdapter.getRegisteredFragment(position);
fragment.toggleArrowVisibility(position == 0, position == list.size() - 1);
}
最初に相対レイアウトを親レイアウトとして使用します
2番目に、それに一致する親属性を持つビューページャーを追加します
3つ目は、ビューページャー上に2つの画像ボタンを配置しますが、親レイアウトの階層の下で、それらを重力として垂直に中央に配置し、要件に応じて左右を左右に保ちます。
4番目に、ボタンの関数コードを記述します
5番目は、現在のビューページャーページを取得するために静的カウンターを取る
左と右のボタンセットのマイナスとプラスのページャーカウンターの応答。そしてそれに従ってビューページャーでデータを表示します
これは、Googleで検索できるコードのシンプルなロジックで、簡単に取得できます