Halaman Tampilan Gambar Bergulir Tak Terbatas

Seperti yang didokumentasikan oleh Google, kelas Galeri tidak digunakan lagi di API level 16. Widget ini tidak lagi didukung. Widget bergulir horizontal lainnya termasuk HorizontalScrollView dan ViewPager dari perpustakaan dukungan. Jadi saya menggunakan ViewPager sebagai alternatif kelas Galeri.

Tujuan saya akhirnya mencapai ViewPager gambar bergulir tanpa batas dengan deskripsi teks. Saya menggunakan kode di bawah ini untuk mendapatkan gambar ViewPager dengan teks yang menjelaskan setiap gambar tetapi bagaimana cara menerapkan Infinite Scrolling ke ViewPager?

Saya belum pernah bekerja dengan ViewPager sebelumnya, jadi coba berikan kode detail jika memungkinkan.

aktivitas_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical">
  <android.support.v4.view.ViewPager 
       android:id="@+id/myimagepager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 
</LinearLayout>

custom_pager.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
   android:layout_width="match_parent" 
   android:layout_height="match_parent" 
   android:orientation="vertical"  
   android:gravity="center_horizontal">
   <ImageView 
       android:id="@+id/myimage" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_margin="5dp" 
       android:layout_weight="2" /> 
    <TextView 
       android:id="@+id/image_text" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp"   
       android:layout_weight="1"/>

</LinearLayout>

Halaman Gambar:

public class ImagePager extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra, stringArray );
        ViewPager myPager = (ViewPager) findViewById(R.id.myimagepager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(0);
    }

    private int imageArra[] = { R.drawable.a, R.drawable.b,R.drawable.c, 
                                 R.drawable.d,R.drawable.e,R.drawable.f,
                                 R.drawable.g, R.drawable.h, R.drawable.i};

    private String[] stringArray = new String[] { "Image a", "Image b","Image c"
                                                   "Image d","Image e","Image f", 
                                                   "Image g","Image h","Image i"};


}

ImagePagerAdapter:

public class ImagePagerAdapter extends PagerAdapter {

    Activity activity;
    int imageArray[];
    String[] stringArray;

    public ImagePagerAdapter(Activity act, int[] imgArra, String[] stringArra) {
        imageArray = imgArra;
        activity = act;
        stringArray = stringArra;
    }

    public int getCount() {
        return imageArray.length;
    }

    public Object instantiateItem(View collection, int position) {
        LayoutInflater inflater = (LayoutInflater)collection.getContext
                          ().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.custom_pager, null);   

        ImageView im=(ImageView) layout.findViewById(R.id.myimage);             
        im.setImageResource(imageArray[position]);

        TextView txt=(TextView) layout.findViewById(R.id.image_text);
        txt.setText(stringArray[position]);

        ((ViewPager) collection).addView(layout, 0);
          return layout;   
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    @Override
    public Parcelable saveState() {
        return null; 
    }


}

person Android Stack    schedule 02.12.2012    source sumber
comment
kelas galeri tidak digunakan lagi.. setelah mencari di Google dan banyak mencari, saya akhiri dengan ViewPager Hah. Hanya butuh beberapa detik bagi saya sejak mengetik 'gallery abdroid' (ya, saya salah mengejanya) ke Google hingga tiba di dokumen untuk Gallery. 3 kalimat pertama menyatakan.. Kelas ini tidak digunakan lagi di API level 16. Widget ini tidak lagi didukung. Widget bergulir horizontal lainnya termasuk HorizontalScrollView dan ViewPager dari perpustakaan dukungan. Jadi tip untuk masa depan. Sebelum melakukan hal lain, bacalah dokumennya. ;)   -  person Andrew Thompson    schedule 02.12.2012
comment
@Andrew Thompson postingan saya yang terhormat diperbarui, dan saya sudah melihat dokumen itu dari Google, itu hanya untuk memberikan alasan mengapa saya beralih ke viewpager, terima kasih.   -  person Android Stack    schedule 02.12.2012


Jawaban (7)


Saya mengalami masalah yang sama, namun saya dapat menemukan cara untuk menyelesaikannya itu - kodenya dapat ditemukan di github.

Jika Anda menyalin kelas InfiniteViewPager dan InfinitePagerAdapter ke dalam proyek Anda, Anda dapat mencapai pengguliran tak terbatas (terbungkus) dengan beberapa perubahan kecil.

Di Aktivitas Anda, gabungkan PagerAdapter Anda dengan InfinitePagerAdapter:

PagerAdapter adapter = new InfinitePagerAdapter(new ImagePagerAdapter(this, imageArra, stringArray));

Ubah ViewPager di XML aktivitas menjadi InfiniteViewPager:

<com.antonyt.infiniteviewpager.InfiniteViewPager 
       android:id="@+id/myimagepager" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" />

Anda dapat mengganti nama kelas menjadi apa pun yang Anda inginkan. Kode ini hanya berfungsi jika Anda memiliki setidaknya tiga halaman (Anda memiliki sembilan halaman dalam kode contoh Anda, jadi kode ini akan berfungsi dengan baik untuk itu).

person antonyt    schedule 09.12.2012
comment
ini berfungsi dengan baik tapi tolong saya punya pertanyaan, sekarang saya memiliki 4 kelas di proyek saya yaitu: 1-ImagePager,2-ImagePagerAdapter,3-InfinitePagerAdapter,4-InfiniteViewPager.java. bisakah kita menggabungkannya dalam satu kelas saja atau dua kelas, pager gambar tak terbatas ini akan menjadi bagian dari proyek besar atau kita harus menyimpannya karena terdiri dari 4 kelas dan apakah ini akan mempengaruhi kinerja atau tidak, terima kasih - person Android Stack; 10.12.2012
comment
Saya rasa Anda tidak akan menemukan perbedaan performa yang mencolok saat menggunakan 4 kelas vs. 2 kelas. Lebih baik memisahkannya karena Anda dapat menambahkan perilaku pengguliran tak terbatas ke PagerAdapter/ViewPager apa pun yang Anda tulis nanti - menggabungkan semuanya berarti tidak dapat digunakan kembali dengan mudah dalam konteks lain. - person antonyt; 10.12.2012
comment
Oke, saya mengerti, satu hal lagi: 1- mengapa kami tidak memiliki satu adaptor saja di proyek ini karena Anda menyebutkan :((bungkus PagerAdapter Anda dengan InfinitePagerAdapter)), mengapa kami tidak menulis satu adaptor dan menyebutnya: InfinitePagerAdapter, atau di sana adalah perilaku spesifik yang harus diperoleh dengan membungkus process , 2-Anda menyebutkan dalam kode Anda: izinkan 100 siklus mundur dari awal, seharusnya cukup untuk menciptakan ilusi ketidakterbatasan. itu berarti saya memiliki 100 siklus baru setiap kali saya membuka aplikasi saya, tolong jelaskan dua poin ini, terima kasih - person Android Stack; 10.12.2012
comment
ImagePagerAdapter Anda memiliki tugas khusus - ia menyajikan tata letak untuk setiap halaman dan tidak perlu mengkhawatirkan hal lain. InfinitePagerAdapter juga hanya mengkhawatirkan pengguliran tanpa batas, bukan tentang halaman tertentu yang dilayani - ia tidak memuat tampilannya sendiri. Ini hanyalah pilihan desain untuk memisahkannya seperti ini - yang memungkinkan InfinitePagerAdapter bekerja dengan PagerAdapter APAPUN yang Anda tulis. Masalah 100 siklus adalah untuk seumur hidup Tampilan, yang umumnya sama dengan seumur hidup Aktivitas. Membuat ulang Aktivitas akan menyebabkannya disetel ulang. - person antonyt; 10.12.2012
comment
Apakah ini mengembalikan posisi yang dipilih dengan benar pada Klik tampilan gambar? - person RobinHood; 16.12.2013
comment
Bagaimana cara menambahkan indikator halaman? - person Aditya; 20.02.2019

Saya pikir solusi saya lebih sederhana.

Perhatian pada struktur susunan gambar saya:

Item 0          => last image

Item count()-1  => first image

Caranya ada di onPageScrollStateChanged:

Saat pengguna menggulir ke item terakhir -> pager melompat tanpa animasi ke gambar pertama (posisi = 1)

Saat pengguna menggulir ke item pertama -> pager melompat tanpa animasi ke gambar terakhir (posisi = hitungan - 2)

public class InfiniteScrollingActivity extends ActionBarActivity {

    private ViewPager     pager;
    private MyAdapter     adapter;
    int[] promoImageIds = new int[]{R.drawable.cover6, R.drawable.cover1, R.drawable.cover2, R.drawable.cover3, R.drawable.cover4, R.drawable.cover5, R.drawable.cover6, R.drawable.cover1 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_test);

        adapter = new MyAdapter(getSupportFragmentManager(), promoImageIds);
        pager = (ViewPager)findViewById(R.id.pager);
        pager.setAdapter(adapter);
        pager.setCurrentItem( 1 );
        pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int index) {
                Log.v( "onPageSelected", String.valueOf( index ) );
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // Log.v("onPageScrolled", "");
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                Log.v("onPageScrollStateChanged", String.valueOf(state));

                if (state ==ViewPager.SCROLL_STATE_IDLE) {
                    int index = pager.getCurrentItem();
                    if ( index == 0 )
                        pager.setCurrentItem( adapter.getCount() - 2, false );
                    else if ( index == adapter.getCount() - 1 )
                        pager.setCurrentItem( 1 , false);
                }
            }
        });
    }


    public static class MyAdapter extends FragmentPagerAdapter {

        int[] promoImageIds;

        public MyAdapter(FragmentManager fm, int[] promoImageIds){
            super(fm);
            this.promoImageIds = promoImageIds;
        }

        @Override
        public int getCount(){
            return promoImageIds.length;
        }

        @Override
        public Fragment getItem(int position) {

            return PromoFragment.newInstance( promoImageIds[position] );
        }
    }

    public static class PromoFragment extends Fragment
    {
        int imageID;


        static PromoFragment newInstance( int imageID)
        {
            PromoFragment f = new PromoFragment();

            // Supply num input as an argument.
            Bundle args = new Bundle();
            args.putInt( "imageID", imageID );
            f.setArguments(args);

            return f;
        }

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            imageID = getArguments() != null ? getArguments().getInt( "imageID" ) : null;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState)
        {
            ImageView v = (ImageView) inflater.inflate(R.layout.fragment_image, container, false);
            v.setImageResource( imageID );
            return v;
        }
    }
}
person Shlomi Hasin    schedule 02.09.2014
comment
Bagian yang sulit adalah membaca secara menyeluruh array promoImageIds Anda, dan menyadari bahwa Anda mengulangi elemen terakhir dan pertama dalam array Anda. Mudah diterapkan dan bekerja dengan sangat baik! - person dianakarenms; 30.05.2017
comment
Pendekatan ini bekerja paling baik bagi saya, tidak mengalami masalah kinerja seperti yang dialami pendekatan Int32.MaxValue Count. - person Justin; 09.11.2018
comment
Berfungsi seperti pesona tetapi indikator di bawah ini tidak berfungsi dengan benar dalam daftar saya memiliki 3 ukuran data, gulirnya tidak terbatas tetapi indikator menunjukkan 2 dapatkah Anda menyelesaikannya - person MustafaShaikh; 16.09.2019

Saya sudah menemukan cara dengan membuat trik sederhana, saya harap ini membantu Anda

import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;

public class ImagePager extends Activity {
    String[] stringArray;
    int[] imageArra;
    ViewPager myPager;
    Boolean isScrooled = false;
    // use this array yo understand swipe left or right ?
    ArrayList<Float> pos = new ArrayList<Float>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            // put  empty view at the beginnig and to end

        imageArra = new int[] { 0, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, 0 };

           // put  empty string at the beginnig and to end

        stringArray = new String[] { "", "Image a", "Image b", "Image c",
                "Image d", "Image e", "Image f", "Image g", "Image h",
                "Image i", "" };

        ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra,
                stringArray);
        myPager = (ViewPager) findViewById(R.id.myimagepager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(1);

        myPager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                Log.v("onPageSelected", String.valueOf(arg0));
                pos.clear();
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                try {
                            // while scrolling i add ever pos to array
                    pos.add(arg1);
                                    // if pos.get(0) > pos.get(pos.size() - 1) 
                    // <----- swipe <-----  
                                    // we should check isScroll because setCurrent item is not a croll ? 

                    if (pos.size() > 0)
                        if (arg0 == imageArra.length - 1
                                & pos.get(0) > pos.get(pos.size() - 1)
                                & isScrooled == true) {
                            try {
                                isScrooled = false;
                                myPager.setCurrentItem(1, false);
                            } catch (Exception e) {
                                Log.v("hata",
                                        "<----- swipe <-----  " + e.toString());
                            }

                        }
                        // ----> swipe ---->
                        else if (arg0 == 0
                                & pos.get(0) < pos.get(pos.size() - 1)
                                & isScrooled == true) {
                            try {
                                isScrooled = false;
                                myPager.setCurrentItem(imageArra.length - 1,
                                        false);
                            } catch (Exception e) {
                                Log.v("hata",
                                        "----> swipe ---->  " + e.toString());
                            }

                        } else if (arg0 == 0 & pos.size() == 1
                                & isScrooled == true) {
                            try {
                                isScrooled = false;
                                myPager.setCurrentItem(imageArra.length - 1,
                                        false);
                            } catch (Exception e) {
                                Log.v("hata",
                                        "----> swipe ---->  " + e.toString());
                            }

                        }

                } catch (Exception e) {
                    Log.v("hata", e.toString());
                }

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                Log.v("onPageScrollStateChanged", String.valueOf(arg0));
                            // set is scrolling
                isScrooled = true;
            }
        });

    }

}

[EDIT 1]

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;

public class ImagePager extends Activity {
    String[] stringArray;
    int[] imageArra;
    ViewPager myPager;
    int scrollState;
    Boolean isFirstVisitEnd= true,isFirstVisitBegin = true;
    ArrayList<Integer> pos = new ArrayList<Integer>();


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageArra = new int[] { 0,R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher, 0 };

        stringArray = new String[] {"","Image a", "Image b", "Image c",
                "Image d", "Image e", "Image f", "Image g", "Image h",
                "Image i", "" };

        ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra,
                stringArray);
        myPager = (ViewPager) findViewById(R.id.myimagepager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(1);

        myPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int arg0) {
                Log.v("onPageSelected", String.valueOf(arg0));
                pos.clear();
                if (arg0 == imageArra.length - 1)
                    isFirstVisitEnd = false;
                else
                    isFirstVisitEnd = true;


                if (arg0 == 0)
                    isFirstVisitBegin = false;
                else
                    isFirstVisitBegin = true;
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {                                
                try { 
                    pos.add(Integer.valueOf(arg2));

                    if (pos.size() > 0) {
                        //Log.v("onPageScrolled_arg2","arg0  : "+String.valueOf(arg0)+"   ilk : "+pos.get(0).toString()+"    son : " +pos.get(pos.size() - 1).toString()+ "   "+ String.valueOf(pos.get(0)-(pos.get(pos.size() - 1)))+"    isFirstVisitEnd: "+String.valueOf(isFirstVisitEnd.booleanValue()) );

                        // <----- swipe <-----
                        if (arg0 == imageArra.length - 2& (pos.get(pos.size() - 1) -pos.get(0)  < 100)& scrollState == 2 & isFirstVisitEnd == false) {                          
                            myPager.setCurrentItem(1, false);
                        }

                        //Log.v("onPageScrolled_arg2","arg0  : "+String.valueOf(arg0)+"   ilk : "+pos.get(0).toString()+"    son : " +pos.get(pos.size() - 1).toString()+ "   "+ String.valueOf(pos.get(0)-(pos.get(pos.size() - 1)))+"    isFirstVisitbegin: "+String.valueOf(isFirstVisitBegin.booleanValue()) );
                        if (arg0 == 0 & (pos.get(pos.size() - 1) -pos.get(0)  > -100)& scrollState == 2 & isFirstVisitBegin == false) {                         
                            myPager.setCurrentItem(imageArra.length - 2, false);
                        }       
                    }

                } catch (Exception e) {
                    Log.v("hata", e.toString());
                }

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                Log.v("onPageScrollStateChanged", String.valueOf(arg0));
                scrollState =arg0;
            }
        });
    }
}
person Talha    schedule 08.12.2012
comment
ok gulir terus tapi masih ada tampilan kosong yang masih muncul ketika mencapai tampilan terakhir dan ingin melanjutkan ke tampilan pertama bagaimana kita mengatasinya, terima kasih - person Android Stack; 09.12.2012
comment
Hai, sulit untuk memahami nilai pasti dari posisi pager, tetapi saya mengubah kodenya dan menurut saya sekarang sudah lebih baik. Tolong lihat editnya, dan jika Anda memiliki ide untuk meningkatkan kualitasnya, bagikan dengan saya ([email protected]). Saya berencana mengembangkan pager tanpa batas dan memasukkannya ke github. - person Talha; 09.12.2012
comment
kode pertama lebih baik dari yang kedua tetapi keduanya masih menampilkan tampilan kosong. yang kedua ketika menggulir untuk mencapai tampilan kosong secara perlahan itu menumpuk di atasnya y harus menggulir kembali satu tampilan lalu maju lagi untuk terus menggulir, terima kasih - person Android Stack; 10.12.2012

Saya menemukan solusi lain, berdasarkan Shlomi Hasin dan antonyt jawaban, tanpa mengubah koleksi.

ViewPager yourPager;
PagerAdapter yourAdapter;
//....
EndlessPagerAdapter endlessPagerAdapter = new EndlessPagerAdapter(yourAdapter, yourPager);
yourPager.setAdapter(endlessPagerAdapter);
yourPager.setCurrentItem(1);//for correct first page

Kelas penuh:

public class EndlessPagerAdapter extends PagerAdapter {

private PagerAdapter adapter;

public EndlessPagerAdapter(PagerAdapter adapter, ViewPager viewPager) {
    this.adapter = adapter;
    viewPager.addOnPageChangeListener(new SwapPageListener(viewPager));
}

@Override
public int getCount() {
    return adapter.getCount() + 2;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    if (adapter.getCount() < 2) {
        adapter.instantiateItem(container, position);
    }

    int newPosition;
    if (position == 0) {
        newPosition = adapter.getCount() - 1;
    } else if (position >= getCount() - 1) {
        newPosition = 0;
    } else {
        newPosition = position - 1;
    }
    return adapter.instantiateItem(container, newPosition);
}

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

@Override
public void finishUpdate(ViewGroup container) {
    adapter.finishUpdate(container);
}

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

@Override
public void restoreState(Parcelable bundle, ClassLoader classLoader) {
    adapter.restoreState(bundle, classLoader);
}

@Override
public Parcelable saveState() {
    return adapter.saveState();
}

@Override
public void startUpdate(ViewGroup container) {
    adapter.startUpdate(container);
}

@Override
public CharSequence getPageTitle(int position) {
    return adapter.getPageTitle(position);
}

@Override
public float getPageWidth(int position) {
    return adapter.getPageWidth(position);
}

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    adapter.setPrimaryItem(container, position, object);
}

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
    adapter.unregisterDataSetObserver(observer);
}

@Override
public void registerDataSetObserver(DataSetObserver observer) {
    adapter.registerDataSetObserver(observer);
}

@Override
public void notifyDataSetChanged() {
    adapter.notifyDataSetChanged();
}

@Override
public int getItemPosition(Object object) {
    return adapter.getItemPosition(object);
}

private class SwapPageListener implements ViewPager.OnPageChangeListener {

    private ViewPager viewPager;

    SwapPageListener(ViewPager viewPager) {
        this.viewPager = viewPager;
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {
        if (state == ViewPager.SCROLL_STATE_IDLE) {
            PagerAdapter pagerAdapter = viewPager.getAdapter();
            if (pagerAdapter != null) {
                int itemCount = pagerAdapter.getCount();
                if (itemCount < 2) {
                    return;
                }
                int index = viewPager.getCurrentItem();
                if (index == 0 ) {
                    viewPager.setCurrentItem(itemCount - 2, false);
                } else if (index == itemCount - 1) {
                    viewPager.setCurrentItem(1, false);
                }
            }
        }
    }
}}

Cara kerjanya:

Kami memiliki beberapa koleksi

koleksi

lalu tambahkan dua item tambahan ke dalamnya

ukuran baru

tampilkan elemen pertama di posisi terakhir dan elemen terakhir di posisi pertama

tampilkan elemen

tambahkan pendengar dan tukar halaman pada acara, dari 4 ke 1 dan dari 0 ke 3

menukar elemen

itu saja.

Saya tidak menyarankan Anda untuk menerapkan animasi atau tata letak yang berat di sana, ini bisa menjadi lambat saat elemen ditukar. (mungkin, saya tidak menemukan kelambatan apa pun)

Juga jangan setel adaptor ini ke pager lebih dari sekali, atau pindahkan SwapPageListener ke kelas eksternal dan setel di blok inisialisasi.

person Anrimian    schedule 16.10.2017

Untuk pengguliran tak terbatas selama berhari-hari, penting bagi Anda untuk memiliki fragmen yang bagus di pager, oleh karena itu saya menulis jawaban saya di halaman ini (Viewpager di Android untuk berpindah antar hari tanpa henti)

Ini bekerja dengan sangat baik! Jawaban di atas tidak berhasil untuk saya karena saya menginginkannya berhasil.

person Richard Lindhout    schedule 01.05.2014

RecyclerViewPager telah menerapkan infinite scrolling dan dapat menggulir seperti galeri.

person panwy    schedule 30.10.2015

person    schedule
comment
Jelaskan dan indentasi jawabanmu! - person Hemant Kaushik; 06.11.2018