2012-09-04 7 views
6

użyć ViewPager wiele WebViews, to jest wykazujący ePub. Mój problem polega na tym, że WebViews są po prostu renderowane/ładowane (nie jestem całkiem pewien), gdy ich odpowiednia strona stanie się widoczna. Następnie strona nie musi być ponownie renderowana, dopóki nie zostanie zniszczona z ViewPagerAdapter. Konsekwencją jest to, że zawsze istnieje biała strona. W jaki sposób mogę renderować stronę, która przewija się płynnie do następnego WebView (który nie był wcześniej renderowany).WebViews w ViewPager nie są ładowane/wydanego aż strona jest pokazana

To mój PagerAdapter:

public class MagazineReaderPagerAdapter extends PagerAdapter { 

    private MagazineReaderActivity activity; 
    private EpubDocument epub; 

    public MagazineReaderPagerAdapter(Context ctx, EpubDocument epub) 
    { 
     activity = (MagazineReaderActivity) ctx; 
     this.epub = epub; 
    } 

    @Override 
     public int getCount() { 
     return epub.getContentDocuments().size(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ReaderWebViewMulti view = new ReaderWebViewMulti(activity); 
     view.loadContentDocument(epub.getContentDocuments().get(position), epub); 

     ((ViewPager) container).addView(view, 0); 
     return view; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view.equals(object); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     ((ViewPager) container).removeView((View) object); 
    } 
} 

ReaderWebViewMulti rozciąga się od WebView ind wdraża wich metoda loadContentDocument wczytuje treści przez loadDataWithBaseURL.

edit: aktywności AT-onCreate na setOffscreenPageLimit jest ustawiony na 3

viewPager.setOffscreenPageLimit(3); 

Aby wskazać na czym polega problem, zrobiłem trochę wideo YouTube

Z drugiej 4 You Can zobacz, że każda strona jest renderowana, gdy jest już widoczna. Kiedy wrócę, wszystko jest w porządku.

+0

Jaki jest 'offscreenPageLimit' dla' ViewPager' aktualnie ustawiony? – Devunwired

+0

jest ustawiony na 3, dodałem to do tekstu – Mate

+2

Mam dokładnie ten sam problem ... I debugowania i tworzy OffScreen fragmenty, ale kiedy przewijać stronę, to po prostu nie pojawi się aż strona jest przewijany: S –

Odpowiedz

0

Włożyłem w to trochę myśli. Przewijając ekran 1 piksel uczyniłoby prawą stronę:

class SomeClass implements OnPageChangeListener { 

     private ViewPager viewPager; 

     ... 

     viewPager = ... 
     viewPager.setOnPageChangeListener(this); 

     ... 

     @Override 
     public void onPageScrollStateChanged(int state) { 

      if (state == ViewPager.SCROLL_STATE_IDLE) { 
       // viewpager finished scrolling to a page 

       viewPager.scrollBy(1, 0); 
      } 
     } 
    } 

trzeba by sprawdzić, czy pochodzą z prawej lub lewej strony i zgodnie z tym zwoju przez -1 lub 1 pikseli (strony, na której jesteś pochodzących z pozostanie w pamięci, więc nie trzeba go ponownie ładować). Tylko przy pierwszym przewijaniu (po otwarciu aplikacji) problem opisany powyżej nadal będzie występował.

wadę: można zobaczyć na stronie przewijanie 1 piksel, jeśli spojrzeć ściśle prawdziwe.

Ktoś więcej czasu niż ja mógł zanurzyć się w android kod, aby zobaczyć, co dokładnie happends gdy przychodzi do 1 piksela na ekranie, i naśladować niektóre z tych zachowań.

0

ustawić tę właściwość dla aplikacji w pliku manifestu

android: hardwareAccelerated = "false"

Powiązane problemy