2

ここに画像の説明を入力

ユーザーがスワイプできる「カード」を表示するViewPagerがあります。カードは独自のフラグメントで作成されます (したがって、ViewPager のコンテンツを作成するために FragmentStatePagerAdapter を使用しています)。

次のカードと、場合によっては前のカードの端を表示したかったので、このサイトで推奨されているように、ViewPager の pageMargin を負の数に設定しました。これはうまく機能し、私が望むように見えます。

私の問題は、カードのクリック イベントに応答する必要があることです。しかし、負の pageMargin を使用すると、ページが重なり合い、間違ったページがクリック イベントを受け取る場合があります。クリック イベントが正しいカードで受信されるようにするにはどうすればよいですか? 基本的に私が欲しいのは、現在/選択されているページのみがクリックイベントを受け取ることです。

viewPager を含むメイン フラグメントから:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_cards_overview, null);

    mCardsViewPager = (ViewPager) root.findViewById(R.id.cards_viewpager);

    mPagerAdapter = new MyPagerAdapter(getActivity(), getFragmentManager(), mCardsList);
    mCardsViewPager.setAdapter(mPagerAdapter);
    mCardsViewPager.setOnPageChangeListener(mPagerAdapter);

    // Necessary or the pager will only have one extra page to show
    // make this at least however many pages you can see
    mCardsViewPager.setOffscreenPageLimit(3);

    // Set margin for pages as a negative number, so a part of next and 
    // previous pages will be showed (convert desired dp to pixels)
    DisplayMetrics m = getResources().getDisplayMetrics();
    int pagerWidthPx = (int) getResources().getDimension(R.dimen.card_width);
    int screenWidthPx = m.widthPixels;
    int px = (int) ((screenWidthPx - pagerWidthPx) * 1.6);
    mCardsViewPager.setPageMargin(-px);

    return root;
}

カードのレイアウト:

<RelativeLayout
    android:id="@+id/card_content"
    android:layout_width="@dimen/card_width"
    android:layout_height="@dimen/card_height"
    android:background="@drawable/card_background" >

    <ImageView
        android:id="@+id/card_logo"
        android:layout_width="50dp"
        android:layout_height="35dp"
        android:layout_margin="8dp"
        android:contentDescription="@string/app_name"
        android:scaleType="fitStart"
        android:src="@drawable/card_logo" />
    <Button
        android:id="@+id/card_remove_button"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_margin="3dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="@drawable/btn_close" /> 

    <TextView
        android:id="@+id/card_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/card_logo"
        android:layout_centerVertical="true"
        android:layout_margin="8dp"
        android:textSize="20sp" />
</RelativeLayout>

寸法.xml:

<dimen name="card_width">300dp</dimen>
<dimen name="card_height">200dp</dimen>
4

1 に答える 1