Search code examples
androidandroid-viewpagersliderviewpagerindicatorautoscroll

slide show with viewPager


I'm trying to create a slide-show with viewPager. My problem is the first item of slide-show is showing up after about 3 seconds even using Picasso library, and also images are stored locally ,I tested it on 3 real devices and the results were the same, how I should solve this?

the activity code:

private void slider() {

   CircleIndicator indicator = (CircleIndicator) findViewById(R.id.ma_slide_indicator);

    sData=new ArrayList<>();

    sData.add(new Slider_Model("item 1",31235545,R.drawable.angrybirds));
    sData.add(new Slider_Model("item 2",12225545,R.drawable.asphalt8));
    sData.add(new Slider_Model("item 3",45522545,R.drawable.clashofclans));
    sData.add(new Slider_Model("item 4",71225222,R.drawable.fruitninja));
    sData.add(new Slider_Model("item 5",91000220,R.drawable.talkingtom));
    sData.add(new Slider_Model("item 6",100022002,R.drawable.cuttherope));
    sData.add(new Slider_Model("item 7",5555445,R.drawable.pou));

    Slide_Adapter slide_adapter = new Slide_Adapter(this,sData);
    viewPager.setAdapter(slide_adapter);
    viewPager.setOffscreenPageLimit(2);
    indicator.setViewPager(viewPager);

    NUM_PAGES=sData.size();

     Runnable Update = new Runnable() {
        public void run() {
            if (currentPage == NUM_PAGES) {
                currentPage = 0;
            }
            viewPager.setCurrentItem(currentPage++, true);
        }
    };

   timing(new Handler(),Update,4000,4000);


    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            Log.v(TAG, "SCROLL POS " + position);
            currentPage = position;
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

}

private void timing(final Handler h, final Runnable run, int delay, int period){

    Timer swipeTimer = new Timer();
    swipeTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            h.post(run);
        }
    }, delay, period);
}

and Adapter:

public class Slide_Adapter extends PagerAdapter {


private static final String TAG ="value" ;
private Context mContext;
private LayoutInflater Inflater;
private ArrayList<Slider_Model> sData;



public Slide_Adapter(Context mContext, ArrayList<Slider_Model> data) {
    this.mContext = mContext;
    this.Inflater=LayoutInflater.from(mContext);
    this.sData=data;
}




@Override
public boolean isViewFromObject(View view, Object object) {
   return view.equals(object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

       View v=Inflater.inflate(R.layout.slideshow_layout,container,false);



        assert v !=null;
        ImageView imageView=(ImageView) v.findViewById(R.id.slide_imageView);
        TextView title=(TextView) v.findViewById(R.id.slide_title);
        TextView phone=(TextView) v.findViewById(R.id.slide_ph);

        title.setText(sData.get(position).getTitle());
        phone.setText(String.valueOf(sData.get(position).getPhone()));
        Picasso.get().load(sData.get(position).getImage()).into(imageView);



        container.addView(v,0);

    return v;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {

    container.removeView((View) object);

}
@Override
public int getCount() {
    return sData.size();
}

}

Solution

  • Since our currentPage is global variable, ensure its been correctly initialized to zero. Then you need to set current item before starting the timer:

    ...
    viewPager.setCurrentItem(currentPage, true);
    Runnable Update = new Runnable() {
        public void run() {
            if (currentPage == NUM_PAGES) {
                currentPage = 0;
            }
            viewPager.setCurrentItem(currentPage++, true);
        }
    };
    ...