2017-08-05 48 views
2

我現在正在實現視圖傳呼機,並且我想要在特定的時期自動地逐一更改圖像時間可能在5毫秒內一次。如何在視圖傳呼機中自動更改圖像,當它到達最後一張圖像時它應該自動到達第一張圖像

我也有手動允許用戶刷卡圖像(它工作正常)

但圖像不會自動改變,當它到達最後的圖像就會自動走到第一圖像

final Handler handler = new Handler(); 
     final Runnable Update = new Runnable() { 
      public void run() { 
       if (currentPage == strImages.length-1) { 
        currentPage = 0; 
       } 
       intro_images.setCurrentItem(currentPage++, true); 
      } 
     }; 

     timer = new Timer(); // This will create a new Thread 
     timer .schedule(new TimerTask() { // task to be scheduled 

      @Override 
      public void run() { 
       handler.post(Update); 
      } 
     }, 500, 3000); 

我用上面的代碼,但它不能正常工作

回答

3

嘗試這種添加addOnPageChangeListenerviewPager這樣

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      if (position == strImages.length-1) { 
       currentPage = 0; 
      } 
      intro_images.setCurrentItem(currentPage++, true); 
     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

或自動切換頁面試試這個創建這樣

Timer timer; 
timer = new Timer(); 
timer.scheduleAtFixedRate(new RemindTask(), 0, 3000); // delay*/ 

private class RemindTask extends TimerTask { 
int current = viewPager.getCurrentItem(); 

@Override 
public void run() { 
    runOnUiThread(new Runnable() { 
     public void run() { 

      if (current < strImages.size()) { 
        viewPager.setCurrentItem(current); 
        current += 1; 
       } else { 

        current = 0; 
        viewPager.setCurrentItem(current); 

       } 
     } 
    }); 

} 
} 
+0

我已經嘗試了所有這些,但它不符合我的要求,我可以期待一些新的答案 我已經看到了這個答案和嘗試,但沒有用它不改變 – Jeyaseelan

+0

@Jeyaseelan檢查更新ans –

+1

非常感謝它解決了我的問題到底@Nilesh Rathod – Jeyaseelan

0
AnimationDrawable animation = new AnimationDrawable(); 
0

一次任務只需添加監聽到你的viewpager得到最後的位置,並滾動到第一位置。

vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         if(position==yourlist.length){ 
          vp.setCurrentItem(0); 
         } 
        } 
       }); 
+0

當我滑動它正常但我需要這個自動完成例如我有10個圖像,所有10當它到達第10張圖像時,圖像應該在5毫秒內自動改變一次,然後應該到達第一張和明星t做同樣的事情這就是我需要的東西 – Jeyaseelan

3

下面的代碼是獲得最後的位置,並滾動到1號位:

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 
{ 
      @Override 

     public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) { 
       if (position == Yourlist.size()-1) { 
        pager.setCurrentItem(0); 
       } 
        pager.setCurrentItem(position++,true); 


      } 

      @Override 
      public void onPageSelected(int position) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

下面的代碼是爲了在使用倒數計時器每10秒自動改變畫面:

- First you have to declare one array,which will contain your 
    images,then after you have to use below code. 

int i=0; 


new CountDownTimer(1000,1000) 
{ 

       @Override 
       public void onTick(long millisUntilFinished) {} 

       @Override 
       public void onFinish() { 
        iV.setImageDrawable(sdk.getContext().getResources().getDrawable(array[i])); 
        i++; 
        if(i== array.length-1) {i=0;} 
        start(); 
       } 
      }.start(); 
+1

這是一個偉大的想法,過程進行得很完美,但圖像沒有變化,多麼感謝您的幫助和好的方法@komal akhani – Jeyaseelan

+0

非常感謝你:) –

1

您不需要Handler和的組合對於這一點,你可以用簡單的Handler這樣使用Handler.postDelayed

private Handler handler = new Handler(); 

final Runnable Update = new Runnable() { 
    public void run() { 
     int totalCount = intro_images.getAdapter().getCount(); 
     int currentItem = intro_images.getCurrentItem(); 
     if (currentItem == (totalCount - 1)) { 
      currentItem = 0; 
     } else { 
      currentItem = currentItem + 1; 
     } 
     intro_images.setCurrentItem(currentItem, true); 

     handler.postDelayed(this, 3000); 
    } 
}; 

@Override 
protected void onResume() { 
    super.onResume(); 

    handler.postDelayed(Update, 500); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    if(handler != null) { 
     handler.removeCallbacks(Update); 
    } 
} 
+0

這很好想法,我已經嘗試過,圖像沒有改變,但謝謝@Muthukrishnan Rajendran – Jeyaseelan

+0

所以這是行不通的。? –

相關問題