这两天有朋友在询问滚动广告怎么实现,然后我对项目中的滚动功能代码进行研究,因为之前向前辈讨论过这种无限滚动的原理。
1.设置一个伪无限的list,将当前图标显示在中间然后进行无线滚动。
2.在头部和尾部加上图标,也就是说在最后一个后面加上第一个对象,在第一个之前加上之前的最后的一个对象,当滑到加上去的对象的时候就强制设置成第一个或者最后一个对象。
自己写了一个小demo,然后代码贴一下吧。
public class MainActivity extends Activity implements ViewPager.OnPageChangeListener{ private List<ImageView> mViewList; private PageAdapter mAdapter; private CustomViewPager pageView; private LinearLayout _llPoints; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_header); pageView= (CustomViewPager)findViewById(R.id.vp_main_list_head); _llPoints = (LinearLayout) findViewById(R.id.ll_main_head_points); //数据展示 mViewList=new ArrayList<ImageView>(); int[] image=new int[]{R.drawable.android_guide_step_4,R.drawable.android_guide_step_1,R.drawable.android_guide_step_2,R.drawable.android_guide_step_3,R.drawable.android_guide_step_4,R.drawable.android_guide_step_1}; for(int i=0;i<image.length;i++){ ImageView imageView=new ImageView(this); imageView.setBackgroundResource(image[i]); mViewList.add(imageView); } mAdapter=new PageAdapter(mViewList,this); pageView.setAdapter(mAdapter); pageView.addOnPageChangeListener(this); Log.e("-------", mViewList.size() + ""); setPoints(true); } private void setPoints(boolean isNew) { if (isNew){ _llPoints.removeAllViews(); } if (_llPoints.getChildCount() == 0) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Util.dp2px(this,5), Util.dp2px(this,5)); for (int i = 0; i < mViewList.size() - 2; i++) { //添加viewpager下方的点 params.leftMargin = Util.dp2px(this,5); ImageView imageView = new ImageView(this); if (mViewList.size() - 3 == i) { imageView.setImageResource(R.drawable.point_selected); } else { imageView.setImageResource(R.drawable.point); } _llPoints.addView(imageView, params); } } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels