4

ViewPager に複数のページを表示するために Dave Smith の PagerContainer を実装しようとしています。ページ番号を表示するオンクリック リスナーを実装しましたが、左側のページをクリックすると、「項目 2 をクリックしました」というメッセージが表示されます (項目 0 が正しいでしょう)。真ん中と右のページをクリックすると、それぞれ「項目 1」と「項目 2」という正しいメッセージが表示されます。問題を説明する画像も添付しました。どうすればこれを修正できますか? 前もって感謝します。

ここに画像の説明を入力

コード スニペットを以下に示します。

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        TextView view = new TextView(PagerActivity.this);
        view.setText("Item "+position);
        view.setGravity(Gravity.CENTER);
        view.setBackgroundColor(Color.argb(255, position * 50, position * 10, position * 50));


        view.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Toast.makeText(PagerActivity.this, "clicked on Item " + String.valueOf(position), 1000).show();

            }
        });

        container.addView(view);
        return view;
    }

    pager.setOffscreenPageLimit(adapter.getCount());

    pager.setPageMargin(15);

    pager.setClipChildren(false);
4

2 に答える 2

1

CommonsWare のリンクされた回避策には、タッチ処理とハードウェア アクセラレーションに関するさまざまな問題があります。むしろ解決策は、ViewPager に負のマージンを指定することです。

ViewPager.setPageMargin(
    getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));

次に、このディメンションを my で指定しましたdimens.xml

<dimen name="viewpager_margin">-64dp</dimen>

ページの重なりを補うために、各ページのコンテンツ ビューには反対の余白があります。

android:layout_marginLeft="@dimen/viewpager_margin_fix"
android:layout_marginRight="@dimen/viewpager_margin_fix"

再びdimens.xml:

<dimen name="viewpager_margin_fix">32dp</dimen>

viewpager_margin_fix(寸法は絶対寸法の半分であることに注意してくださいviewpager_margin。)

これをオランダの新聞アプリDe Telegraaf Krantに実装しました。

De Telegraaf Krant での電話の例タブレットの例

于 2014-01-06T11:33:13.947 に答える