Autore Topic: PageViewer circolare  (Letto 301 volte)

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
PageViewer circolare
« il: 13 Settembre 2014, 11:49:17 CEST »
0
Salve a tutti, sto cercando di realizzare un visualizzatore di immagini con immagini caricate dinamicamente. Per farlo volevo usare un PageViewer e mi serviva che fosse circolare (così che ad ogni swype modifico gli elementi non visibili nascondendo all'utente il fatto che in realtà solo poche immagini sono davvero caricate). Il problema è che non riesco proprio a farlo.
Sapete darmi qualche indicazione o linkarmi qualche guida?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:PageViewer circolare
« Risposta #1 il: 13 Settembre 2014, 12:49:18 CEST »
0
Magari dico una cavolata. Ho realizzato un viewPager mettendo dei fragment in una lista. Magari potresti vedere se il fragment corrent è alla posizione finale della lista. se si allora aggiungi alla lista il fragment che era alla posizione 0 in lista

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:PageViewer circolare
« Risposta #2 il: 13 Settembre 2014, 15:04:55 CEST »
0
Quindi tu consigli di aggiungere elementi alla lista?
Però dovrei anche rimuoverli dalla testa via via che viene scorsa (per non appesantire la memoria): questo non farebbe casino con gli indici?
Io avevo pensato all'uso di un array in modo circolare (ma anche una lista di per sé andrebbe bene), solo che per qualche motivo mi faceva casino con gli indici.

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:PageViewer circolare
« Risposta #3 il: 14 Settembre 2014, 17:05:51 CEST »
0
Ho trovato un esempio con PageAdapter che funziona, solo che ha un problema strano: non mi fa applicare modifiche permanenti alle proprietà degli widget delle view.
l'activity principale è questa:
Codice (Java): [Seleziona]
public class MainActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            ViewPager myPager = (ViewPager) findViewById(R.id.ViewPagerMainActivity);
            PagerAdapter adapter = new CircularPagerAdapter(myPager, new int[]{R.layout.view1, R.layout.view2, R.layout.view3});
            myPager.setAdapter(adapter);
            myPager.setCurrentItem(1);
        }
       
        public void click(View v){
                TextView t = (TextView) findViewById(R.id.textView1);
                t.setText("lol");
        }
}

E questo è il PageAdapter
Codice (Java): [Seleziona]
public class CircularPagerAdapter extends PagerAdapter{

        private int[] pageIDsArray;
        private int count;

        public CircularPagerAdapter(final ViewPager pager, int... pageIDs) {
                super();
                int actualNoOfIDs = pageIDs.length;
                count = actualNoOfIDs + 2;
                pageIDsArray = new int[count];
                for (int i = 0; i < actualNoOfIDs; i++) {
                        pageIDsArray[i + 1] = pageIDs[i];
                }
                pageIDsArray[0] = pageIDs[actualNoOfIDs - 1];
                pageIDsArray[count - 1] = pageIDs[0];

                pager.setOnPageChangeListener(new OnPageChangeListener() {

                        public void onPageSelected(int position) {
                       
                        }

                        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                                // TODO Auto-generated method stub
                        }

                        @Override
                        public void onPageScrollStateChanged(int state) {
                                if (state == ViewPager.SCROLL_STATE_IDLE) {
                                        int pageCount = getCount();
                                        int currentItem = pager.getCurrentItem();
                                        if (currentItem == 0) pager.setCurrentItem(pageCount - 2, false);  
                                        else if (currentItem == pageCount - 1) pager.setCurrentItem(1, false);
                                }
                        }
                });
        }

        public int getCount() {
                return count;
        }

        public Object instantiateItem(View container, int position) {
                LayoutInflater inflater = (LayoutInflater) container.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                int pageId = pageIDsArray[position];
                View view = inflater.inflate(pageId, null);
                ((ViewPager) container).addView(view, 0);

                return view;
        }

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

        @Override
        public void finishUpdate(View container) {
                // TODO Auto-generated method stub
        }

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

        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {
                // TODO Auto-generated method stub
        }

        @Override
        public Parcelable saveState() {
                // TODO Auto-generated method stub
                return null;
        }

        @Override
        public void startUpdate(View container) {
                // TODO Auto-generated method stub
        }

}

Io ho messo in view1 una text view e nella view3 un bottone. Quando clicco sul bottone voglio che la text view nella view1 cambi testo. Mentre scorro le pagine posso vedere che la view1 ha il testo aggiornato, ma appena finisco di aprire la pagina mi ritrovo con il valore di default.