2014-01-23 39 views
3

我在這裏看到一些類似的帖子,但沒有合適的答案。Android:Viewpager OnPageChangeListener onpageselected擾動幻燈片動畫

我使用事件onpageselected在視圖打印機執行一個函數。此功能依賴於網絡,因此可能需要一些時間。但是,然後幻燈片動畫看起來很滯後。

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int i, float v, int i2) { 

      } 

      @Override 
      public void onPageSelected(int i) { 
       makeSomeHeavyTask(); 
      } 

      @Override 
      public void onPageScrollStateChanged(int i) { 

      } 
     }); 

任務繁重:

public void makeSomeHeavyTask() { 
     handler.post(new QueryRunnable()); 

    } 

有沒有辦法解決這個問題的方法嗎?謝謝

+0

我們可以看到代碼的機會嗎? – Uxonith

+0

添加了一些代碼 – user2212461

+2

您是否在不影響主UI的情況下在單獨的線程中執行「heavyTask」? –

回答

1

做一個AsyncTask繁重的任務。看看這裏接受的答案AsyncTask: where does the return value of doInBackground() go?

編輯:您需要先返回getView的佔位符。如果getView方法必須等待線程完成,那麼動畫肯定會滯後。稍後可以使用返回的佔位符在線程完成後進行發佈。

+0

我通過Handler在另一個線程中執行它。 (請參閱函數makesomeheavytask()。有沒有辦法在異步任務中執行幻燈片動畫?! – user2212461

+0

動畫只能在UI /主線程中完成。其他任何可以卸載到線程的內容 – Shakti

+0

謝謝,您的編輯解決了我的問題 – user2212461

0

如果你有不能在不同的線程中執行任務,您可以使用回調

public void onPageScrollStateChanged(int i) 

,而不是public void onPageSelected(int i)

if(i == ViewPager.SCROLL_STATE_IDLE) { 
    //your task 
} 

。這將在動畫完成後調用。