android - 滑动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();
}
}
我是根据谷歌为此类问题提供的文档进行的
解决方案
要处理ViewPager2
您需要添加一个 OnPageChangedCallback 的滑动动作。例如:
pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
//todo change your button color
}
})
推荐阅读
- javascript - element.focus() 在 Firefox 和 Edge 与 Chrome 中有所不同
- reactjs - 如何使用 React Navigation 5 在 Action Creators 中导航到屏幕
- python - 如何使用上次检查时间而不是日期搜索邮箱?
- java - 从 Hibernate Optimistic Locking 异常中恢复
- android - 购买付费应用时是否可以发送账户信息?
- javascript - 在 React 中使用异步从 API 恢复数据时遇到问题
- firebase - 必须将非空字符串提供给 Text 小部件。在 Flutter 中显示数据!= null'
- reactjs - 在反应中设置状态问题
- html - CSS:在手机视图中图像尺寸变大
- python - 程序没有完全终止