【问题标题】:Display of Multiple pages in ViewPager, Incorrect Position在 ViewPager 中显示多个页面,位置不正确
【发布时间】:2012-10-26 12:33:19
【问题描述】:

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

代码sn-p如下:

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

【问题讨论】:

  • 尝试用 Toast.makeText(PagerActivity.this, "clicked on Item " + ((TextView)view).getText(), 1000).show(); 替换你的 toast;
  • @Lemberg,很遗憾这没有帮助。
  • 你找到解决方案了吗

标签: android android-viewpager


【解决方案1】:

直升机,

在 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);
}

【讨论】:

  • 这个工作..谢谢你
  • 如果您在横向中看到的页面超过三个会怎样?
  • 什么是 mCentermInitialTouch
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多