Синхронизация двух ViewPager2 - PullRequest
       58

Синхронизация двух ViewPager2

0 голосов
/ 30 сентября 2019

Есть ли способ синхронизации двух отдельных ViewPager2 представлений. Оба пейджера содержат одинаковое количество элементов. Я хочу, чтобы оба пейджера синхронно прокручивали эфир, прокручивая в первую или вторую ViewPager2.

. Я попытался зарегистрировать ViewPager2.OnPageChangeCallback следующим образом:

viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

, но ни один из методов не может помочь (возможно onPageScrolled но я не знаю, как перевести эту прокрутку в секунду viewPager2).

1 Ответ

0 голосов
/ 08 октября 2019

Вам необходимо использовать ViewPager2.OnPageChangeCallback()

Проверьте этот репозиторий на наличие исходного кода https://github.com/RathodNilesh14/Synchronization-of-two-ViewPager2

SAMPLE CODE

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

public class JavaActivity extends AppCompatActivity {

    ViewPager2 myFirstViewPager, mySecondViewPager;

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

        myFirstViewPager = findViewById(R.id.myFirstViewPager);
        mySecondViewPager = findViewById(R.id.mySecondViewPager);

        MyAdapter myAdapter = new MyAdapter(this);
        myFirstViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
        myFirstViewPager.setAdapter(myAdapter);

        mySecondViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
        mySecondViewPager.setAdapter(myAdapter);

        myFirstViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                mySecondViewPager.setCurrentItem(position, false);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

        mySecondViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                myFirstViewPager.setCurrentItem(position, false);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

    }


}
...