在ViewPager中显示多个页面,位置不正确

时间:2012-10-26 12:33:19

标签: android android-viewpager

我正在尝试使用Dave Smith的PagerContainer在我的ViewPager中显示多个页面。我已经实现了一个点击监听器来显示页码,但是当我点击左侧页面时,会显示“点击第2项”消息(第0项是正确的)。如果单击中间和右侧页面,将分别显示正确的消息“项目1”和“项目2”。我还附上了一张图片来描述这个问题。我怎样才能解决这个问题?提前谢谢。

enter image description here

下面给出了代码段:

    @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);

2 个答案:

答案 0 :(得分:3)

直升机,

在PagerContainer.java文件中更改此设置。 我认为这会有所帮助:

@Override
public boolean onTouchEvent(MotionEvent ev) {
    // We capture any touches not already handled by the ViewPager
    // to implement scrolling from a touch outside the pager bounds.
    switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        mInitialTouch.x = (int) ev.getX();
        mInitialTouch.y = (int) ev.getY();
    default:
        if (mInitialTouch.x < mCenter.x) {
            ev.offsetLocation(-(mCenter.x - mInitialTouch.x), mCenter.y - mInitialTouch.y);
        } else {
            ev.offsetLocation(mCenter.x - mInitialTouch.x, mCenter.y - mInitialTouch.y);
        }
        break;
    }

    return mPager.dispatchTouchEvent(ev);
}

答案 1 :(得分:1)

CommonsWare的链接解决方法中存在触摸处理和硬件加速的各种问题。一个相当的解决方案是为ViewPager指定负余量:

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

然后我在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维度的一半。)

我们实施了此in the Dutch newspaper app De Telegraaf Krant

Phone example in De Telegraaf Krant Tablet example