2012-04-06 20 views
11

Używam pager'a z Androidem do wyświetlania obrazów i tekstu, teraz czego chcę, to jeśli użytkownik nie zmienia obrazów, to powinien zacząć automatycznie zmieniać obrazy po kilku sekund i kiedy użytkownik ponownie zacznie używać palca, obrazy nie powinny się automatycznie zmieniać?Pager z widokiem na Androida zmienia strony automatycznie po kilku sekundach

Próbowałem użyć programu obsługi do utworzenia opóźnienia, ale nie zadziałało to dla mnie?

Proszę pomóc ktoś

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

spróbuj ViewSwitcher. Zaprojektuj swoją stronę i wywołaj jej metodę next() po kilku sekundach. \ –

+0

czy możesz podać przykład lub fragment kodu? –

+0

hej kolego, mam zaimplementowany ten scenariusz, jeśli potrzebujesz go po prostu daj mi znać, że opublikuję rozwiązanie tutaj – krisDrOid

Odpowiedz

3

Zastosowanie javautil czasomierz i ustawić jeden w górę i na koniec timera można użyć

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

nadzieję, że pomoże, użyj android docs dla wzywa dokładny API

+0

Próbowałem, że onCreate (aktywność) i java.lang.IllegalStateException: Musi być wywołany z głównego wątku procesu :/ – GuilhE

+0

Sprawdź tę odpowiedź na 'stackoverflow': http://stackoverflow.com/a/17612369/1773155 –

0

Jeśli chodzi o aktualizację interfejsu użytkownika, można to zrobić za pomocą programu obsługi, więc wywołaj program obsługi w klasie timertask, c zrobić coś takiego:

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

Po wykonaniu tej czynności można nazwać poniżej dwóch linii wewnątrz każdej swojej onresume lub onCreate() metoda

timer = new Timer(); 
     timer.schedule(new UpdateTimeTask(), 100, 2000); 
Powiązane problemy