2
我有一個ViewPager顯示「卡」,用戶可以刷卡之間。卡片是在自己的片段中創建的(所以我使用FragmentStatePagerAdapter爲ViewPager創建內容)。
我想顯示下一張和可能以前的卡片的邊緣,因此在本網站上推薦我將ViewPager的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>
dimens.xml:
<dimen name="card_width">300dp</dimen>
<dimen name="card_height">200dp</dimen>