1

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

}
Mahdi Moqadasi
  • 2,029
  • 4
  • 26
  • 52
amir dt
  • 83
  • 2
  • 9
  • have you tried imageView.setImageResource(sData.get(position).getImage()); – Rajasekaran M Apr 09 '18 at 06:36
  • You should check [https://stackoverflow.com/questions/36988461/slow-load-of-local-images-with-picasso](https://stackoverflow.com/questions/36988461/slow-load-of-local-images-with-picasso) – Kunu Apr 09 '18 at 06:44
  • And apart from that when you are setting offset limit to 2 that means you are loading two right and two left pages simultaneously. – Kunu Apr 09 '18 at 06:46
  • thank you for reply,i tried all of this and problem still exist on the first image,only first image! – amir dt Apr 09 '18 at 07:03
  • Please try seting off screen page litmit to 1. viewPager.setOffscreenPageLimit(1); – Jaypal Rana Apr 09 '18 at 07:08
  • i removed this line to use default value – amir dt Apr 09 '18 at 07:15

1 Answers1

0

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);
    }
};
...
Sagar
  • 23,903
  • 4
  • 62
  • 62
  • "currentPage=0" is a global variable and defined outside of this method. – amir dt Apr 09 '18 at 07:26
  • ensure its initialized to 0 for first time. If this is the case, then use it as it is without adding it again. I will remove from my answer – Sagar Apr 09 '18 at 07:27