2012-04-06 13 views
11

Ho usato Android ViewPerer per visualizzare immagini e testo ora quello che voglio è che se un utente non sta cambiando le immagini allora dovrebbe iniziare a cambiare automaticamente le immagini dopo alcune secondi e quando l'utente inizia a usare il dito, le immagini non dovrebbero cambiare automaticamente?Android view pager cambia pagina automaticamente dopo alcuni secondi

Ho provato a utilizzare il gestore per creare un ritardo ma non ha funzionato per me?

Si prega di aiutare chiunque

public class SimpleImageViewerActivity extends Activity implements ViewPager.OnPageChangeListener{ 
    private Handler handler; 
    ViewPager myPager; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.imageslideshow); 
     MyPagerAdapter adapter = new MyPagerAdapter(); 
     myPager = (ViewPager) findViewById(R.id.slideShowPager); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(0); 

     handler = new Handler(); 
    myPager.setOnPageChangeListener(this); 
    } 

    private class MyPagerAdapter extends PagerAdapter { 

     public int getCount() { 
      return 5; 
     } 

     public Object instantiateItem(View collection, int position) { 

      LayoutInflater inflater = (LayoutInflater) collection.getContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      int resId = 0; 
      switch (position) { 
      case 0: 
       resId = R.layout.farleft; 
       break; 
      case 1: 
       resId = R.layout.left; 
       break; 
      case 2: 
       resId = R.layout.middle; 
       break; 
      case 3: 
       resId = R.layout.right; 
       break; 
      case 4: 
       resId = R.layout.farright; 
       break; 
      } 

      View view = inflater.inflate(resId, null); 

      ((ViewPager) collection).addView(view, 0); 

      return view; 
     } 

     @Override 
     public void destroyItem(View arg0, int arg1, Object arg2) { 
      ((ViewPager) arg0).removeView((View) arg2); 

     } 

     @Override 
     public void finishUpdate(View arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == ((View) arg1); 

     } 

     @Override 
     public void restoreState(Parcelable arg0, ClassLoader arg1) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public Parcelable saveState() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void startUpdate(View arg0) { 
      // TODO Auto-generated method stub 

     } 


    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
     // TODO Auto-generated method stub 

     updateUI(arg2); 
    } 

    @Override 
    public void onPageSelected(int arg0) { 
     // TODO Auto-generated method stub 
     //updateUI(arg0); 

    } 

    public void onNothingSelected(AdapterView<?> adapterView) {  
     final int i =0; 
     adapterView.postDelayed(new Runnable(){ 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       updateUI(i);    
      } 

     }, 5000); 
     Toast.makeText(this, "In nothing selected method",Toast.LENGTH_SHORT).show(); 




    } 

    private void updateUI(final int fi) { 
      /* handler.post(new Runnable() { 
       public void run() { 
        gallery.setSelection(i); 
        viewPager.setCurrentItem(i); 

        //textView.setText("Photo #" + i); 
       } 
      });*/ 
      handler.postDelayed(new Runnable() { 
       public void run() { 
        int i=fi; 
        int j = i; 
        myPager.setCurrentItem(j++); 
        System.out.println("Hello");    

       } 
      },1000); 
     } 


} 
+0

provare con ViewSwitcher. Progetta la tua pagina e chiama il suo metodo next() dopo pochi secondi .. \ –

+0

puoi per favore dare un esempio o uno snippet di codice? –

+0

hey amico, ho implementato questo scenario se ne hai bisogno fammi sapere che posterò la soluzione qui – krisDrOid

risposta

3

Usa javautil timer e impostare uno e alla fine del timer è possibile utilizzare

class UpdateTimeTask extends TimerTask { 
    public void run() { 
    //Code for the viewPager to change view 
    } 
} 


// Code to schedule the timer 
timer = new Timer(); 
timer.schedule(new UpdateTimeTask(), 100, 200); 

Spero che questo aiuti, utilizzare la documentazione Android per API esatto chiamate

<ViewPager>.setCurrentitem(i++%<MaxViews>) 
+0

Provato che onCreate (attività) e java.lang.IllegalStateException: Deve essere chiamato dalla thread principale del processo :/ – GuilhE

+0

Controlla questa risposta su 'stackoverflow': http://stackoverflow.com/a/17612369/1773155 –

0

Per quanto riguarda l'aggiornamento dell'interfaccia utente, è possibile farlo tramite gestore, quindi chiamare un gestore all'interno della classe timertask, si c un fare qualcosa di simile:

Timer timer=null; 
static int time_tomove = 0; 

class UpdateTimeTask extends TimerTask { 
     public void run() { 
     //Code for the viewPager to change view 
      System.out.println("The value of the time_tomove "); 
      time_tomove++; 
      Message msg = handler_timer.obtainMessage(); 
      Bundle b = new Bundle(); 
      b.putInt("time", time_tomove); 
      msg.setData(b); 
      handler_timer.sendMessage(msg); 
     } 
    } 




public static Handler handler_timer = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
    magazineHolder.setCurrentItem(time_tomove); 
    } 
}; 

Dopo aver fatto questo è possibile chiamare il seguito due linee all'interno sia il vostro onResume o OnCreate() metodo

timer = new Timer(); 
     timer.schedule(new UpdateTimeTask(), 100, 2000); 
Problemi correlati