4

我正在尝试实现 Dave Smith 的 PagerContainer 以在我的 ViewPager 中显示多个页面。我已经实现了一个单击侦听器来显示页码,但是当我单击左侧页面时,会显示“单击第 2 项”消息(第 0 项是正确的)。如果单击中间页面和右侧页面,则会显示正确的消息,分别为“item 1”和“item 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

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);
}
于 2014-04-24T07:40:50.067 回答
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尺寸的一半。)

我们在荷兰报纸应用程序De Telegraaf Krant中实现了这一点:

De Telegraaf Krant 中的电话示例平板电脑示例

于 2014-01-06T11:33:13.947 回答