ViewPager实现无线循环滚动

来源:互联网 发布:迅龙数据恢复软件安卓 编辑:程序博客网 时间:2024/05/22 15:03
  • 实现思路,我们普通的ViewPager无法实现无线循环滚动,主要是因为我们在适配器里返回的view数量有限,所以也有就是有限的几页可以滚动,如果将适配器里返回的view数量设置为无穷大,那么可以滚动的页面就无穷多了,可以无穷滚动。
  • 实现代码
//这只针对至少包含四个子view的viewpagerpublic class MainActivity extends Activity {    private ViewPager vp;    private List<View> views = new ArrayList<View>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        for (int i = 0; i < 4; i++) {            views.add(createText(i));        }        vp = (ViewPager) this.findViewById(R.id.vp);        vp.setAdapter(new PagerAdapter() {            @Override            public boolean isViewFromObject(View arg0, Object arg1) {                return arg0 == arg1;            }            @Override            public int getCount() {                return Integer.MAX_VALUE;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                View view = views.get(position % views.size());                container.addView(view);                return view;            }            @Override            public void destroyItem(ViewGroup container, int position,                    Object object) {                container.removeView(views.get(position % views.size()));                   }        });        //确定中间位置的第一页的索引        int middlePosition = Integer.MAX_VALUE / 2;        int firstPosition = middlePosition / views.size() * views.size();        vp.setCurrentItem(firstPosition);    }    private TextView createText(int i) {        TextView tv = new TextView(this);        tv.setGravity(Gravity.CENTER);        tv.setTextSize(40);        tv.setText("" + i);        tv.setBackgroundColor(getColor());        return tv;    }    //生成随机色    private int getColor()    {        Random random = new Random();        return Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255));    }}
//这只针对至少包含三个子view的viewpagerpublic class MainActivity extends Activity {    private ViewPager vp;    private List<View> views = new ArrayList<View>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        vp = (ViewPager) this.findViewById(R.id.vp);        for (int i = 0; i <8; i++) {            views.add(createText(i));        }        vp.setAdapter(new PagerAdapter() {            @Override            public boolean isViewFromObject(View arg0, Object arg1) {                return arg0 == arg1;            }            @Override            public int getCount() {                return Integer.MAX_VALUE;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                View view = views.get(position % views.size());                removeFromParent(view);                container.addView(view);                return view;            }            @Override            public void destroyItem(ViewGroup container, int position,                    Object object) {                //右滑                if(position > vp.getCurrentItem() && views.size() == 3)                {                    return;                }                container.removeView(views.get(position % views.size()));            }        });        //确定中间位置的第一页的索引        int middlePosition = Integer.MAX_VALUE / 2;        int firstPosition = middlePosition / views.size() * views.size();        vp.setCurrentItem(firstPosition);    }    private TextView createText(int i) {        TextView tv = new TextView(this);        tv.setGravity(Gravity.CENTER);        tv.setTextSize(40);        tv.setText("" + i);        tv.setBackgroundColor(getColor());        return tv;    }    //生成随机色    private int getColor()    {        Random random = new Random();        return Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255));    }    private void removeFromParent(View v)    {        ViewGroup parent = (ViewGroup) v.getParent();        if(parent != null)        {            parent.removeView(v);        }    }}
0 0
原创粉丝点击