2012-04-06 12 views
11

Tôi đã sử dụng máy nhắn tin xem android để hiển thị hình ảnh và văn bản bây giờ những gì tôi muốn là nếu người dùng không thay đổi hình ảnh thì nó sẽ bắt đầu thay đổi hình ảnh tự động sau một vài giây và khi người dùng bắt đầu sử dụng ngón tay của mình thì hình ảnh sẽ không tự động thay đổi?Android page pager tự động thay đổi sau vài giây

Tôi đã cố sử dụng trình xử lý để tạo sự chậm trễ nhưng nó không hoạt động đối với tôi?

Xin giúp ai

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

thử với ViewSwitcher. Thiết kế trang của bạn và gọi phương thức của nó tiếp theo() sau vài giây .. \ –

+0

bạn có thể đưa ra ví dụ hoặc đoạn mã không? –

+0

hey buddy, tôi đã thực hiện kịch bản này nếu u cần nó chỉ cho tôi biết tôi sẽ đăng giải pháp ở đây – krisDrOid

Trả lời

3

Sử dụng javautil hẹn giờ và thiết lập một và ở phần cuối của bộ đếm thời gian, bạn có thể sử dụng

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

Hope this helps, sử dụng các tài liệu android cho API chính xác gọi

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

Đã thử rằng onCreate (activity) và java.lang.IllegalStateException: Phải được gọi từ luồng chính của quy trình :/ – GuilhE

+0

Kiểm tra câu trả lời này trên 'stackoverflow': http://stackoverflow.com/a/17612369/1773155 –

0

Theo như cập nhật giao diện người dùng, bạn có thể thực hiện điều đó thông qua trình xử lý, Vì vậy, hãy gọi trình xử lý bên trong lớp timertask, bạn c một làm một cái gì đó như thế này:

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

Sau khi thực hiện điều này, bạn có thể gọi dưới hai dòng bên trong một trong hai onresume hoặc onCreate() phương pháp

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