首页 > 解决方案 > 滑动viewPager2时如何改变按钮的背景颜色?

问题描述

我正在使用 viewPager2 在不同的片段之间滑动。但是,我需要在滑动时更改底部按钮的颜色。通过单击按钮,我可以捕获动作并更改它。前后滑动时如何做同样的事情?

public class ScreenSlideActivity extends FragmentActivity {

    private ViewPager2 mPager;
    private FragmentStateAdapter pagerAdapter;
    private Button btn_pular;
    private Button btn_voltar;
    ArrayList<Fragment> fragments = new ArrayList<>();

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

        btn_pular = findViewById(R.id.btn_puler_pager);
        btn_voltar = findViewById(R.id.btn_voltar_pager);

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = findViewById(R.id.pager);
        pagerAdapter = new ScreenSlidePagerAdapter(this, initiateFragments());
        mPager.setAdapter(pagerAdapter);
        mPager.setPageTransformer(new ZoomOutPageTransformer());

    }

    private ArrayList<Fragment> initiateFragments() {

        fragments.add(ScreenSlidePageFragment2.newInstance());
        fragments.add(ScreenSlidePageFragment1.newInstance());
        fragments.add(ScreenSlidePageFragment3.newInstance());

        return fragments;
    }


    public void onClickBtn_pular(View view) {
        if (mPager.getCurrentItem() == 0)
            mPager.setCurrentItem(mPager.getCurrentItem() + 1);
        alteraItems();

    }

    public void onClickVoltar(View view){
        onBackPressed();
    }

    private void compartilha(){

    }

    private void alteraItems(){
        if(mPager.getCurrentItem() == 0){
            btn_pular.setBackgroundColor(getResources().getColor(R.color.branco));
        }else{
            btn_pular.setBackgroundColor(getResources().getColor(R.color.laranja));
        }
    }

    private void gravaItems(){
        //após gravar vai a pagina de compartilhamento
        mPager.setCurrentItem(mPager.getCurrentItem() + 1);
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            // If the user is currently looking at the first step, allow the system to handle the
            // Back button. This calls finish() on this activity and pops the back stack.
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }
}

浏览器:

public class ScreenSlidePagerAdapter extends FragmentStateAdapter {

    private ArrayList<Fragment> fragments = new ArrayList<>();
    private FragmentActivity fa;

    public ScreenSlidePagerAdapter(FragmentActivity fa, ArrayList<Fragment> fragments) {
        super(fa);
        this.fa = fa;
        this.fragments = fragments;

    }


    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return fragments.get(position);
    }

    @Override
    public int getItemCount() {
        return fragments.size();
    }
}

我是根据谷歌为此类问题提供的文档进行的

标签: android

解决方案


要处理ViewPager2您需要添加一个 OnPageChangedCallback 的滑动动作。例如:

pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
    override fun onPageSelected(position: Int) {
        //todo change your button color
    }
})

推荐阅读