显示在ViewPager多页的,不正确的位置 [英] Display of Multiple pages in ViewPager, Incorrect Position

查看:242
本文介绍了显示在ViewPager多页的,不正确的位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现戴夫·史密斯的PagerContainer展现在我的ViewPager多个页面。我已经实现了在点击监听器来显示页码,但是当我点击页面左侧的点击2项消息显示(项目0是正确的)。如果我点击中间和右边的页面,正确的消息显示,项目1和项目2分别。我还附有图片说明问题。我该如何解决这个问题?先谢谢了。

在code代码片段如下:

  @覆盖
    公共对象instantiateItem(ViewGroup中的容器,最终诠释位置){
        TextView的视图=新的TextView(PagerActivity.this);
        view.setText(项目+位置);
        view.setGravity(Gravity.CENTER);
        view.setBackgroundColor(Color.argb(255位* 50位* 10,位置* 50));


        view.setOnClickListener(新View.OnClickListener(){

            公共无效的onClick(视图v){

                Toast.makeText(PagerActivity.this,点击物品+将String.valueOf(位置),1000).show();

            }
        });

        container.addView(视图);
        返回查看;
    }
 


  pager.setOffscreenPageLimit(adapter.getCount());

    pager.setPageMargin(15);

    pager.setClipChildren(假);
 

解决方案

直升机,

在PagerContainer.java文件中更改此。 我认为这将有助于:

  @覆盖
公共布尔的onTouchEvent(MotionEvent EV){
    //我们捕捉尚未被ViewPager处理的任何接触
    //实现从寻呼机范围之外触摸滚动。
    开关(ev.getAction()){
    案例MotionEvent.ACTION_DOWN:
        mInitialTouch.x =(int)的ev.getX();
        mInitialTouch.y =(int)的ev.getY();
    默认:
        如果(mInitialTouch.x< mCenter.x){
            ev.offsetLocation( - (mCenter.x  -  mInitialTouch.x),mCenter.y  -  mInitialTouch.y);
        } 其他 {
            ev.offsetLocation(mCenter.x  -  mInitialTouch.x,mCenter.y  -  mInitialTouch.y);
        }
        打破;
    }

    返回mPager.dispatchTouchEvent(EV);
}
 

I am trying to implement Dave Smith's PagerContainer to show multiple pages in my ViewPager. I have implemented an on-click listener to display the page numbers, but when I click on the left page, "clicked on item 2" message is shown (item 0 would be correct). If I click on the middle and the right pages, correct messages are displayed, "item 1" and "item 2" respectively. I've also attached an image to describe the problem. How can I fix this? Thanks in advance.

The code snippet is given below:

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

解决方案

Helo,

Change this in the PagerContainer.java file. I think this will help:

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

这篇关于显示在ViewPager多页的,不正确的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆