我有一个左右箭头viewpager
。我希望在ViewPager的第一个位置时隐藏左箭头,并在ViewPager的最后位置可见时隐藏右箭头。
我已经提到了这个解决方案:How to get position of first and last position of viewpager?
在我的视图寻呼机中,我一次有3个可见页面。为此,我使用了getPageWidth到0.33f :
但它对我没有预期的效果。
我的代码:
vpPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == (vpPager.getAdapter().getCount())-1) {
right.setVisibility(View.INVISIBLE);
} else {
right.setVisibility(View.VISIBLE);
}
if (position == 0) {
left.setVisibility(View.INVISIBLE);
} else {
left.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
在XML中,我已经为两个箭头设置了可见性。
任何帮助都将是值得赞赏的。谢谢!
答案 0 :(得分:2)
以下解决方案与我合作正常。
对于你的情况,你不能从onPageSelected(int position)获得最后一个位置'6'。如果您的位置 totalNumberofPages - numberOfVisiblePagesAtATime ,则屏幕上已显示最后一页。
例如,7-3 = 4(如果你得到位置4,则表示最后一页位置6已经在屏幕上。)
您无法登记onPageChangeListener()
。因为这不会在第一次启动时调用。
在viewPager
设置后,您需要隐藏左箭头。然后在onPageChangeListener
来电,再次见到。
答案 1 :(得分:2)
为了使其有效,我会使用onPageScrolled
而不是onPageSelected
,因为在ViewPager
初始化之后不会立即调用后者,并且可以保持按钮可见xml文件。它看起来像这样:
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (position == 0) {
left.setVisibility(View.INVISIBLE);
} else {
left.setVisibility(View.VISIBLE);
}
if (position == adapter.getCount() - 1) {
right.setVisibility(View.INVISIBLE);
} else {
right.setVisibility(View.VISIBLE);
}
}
});
下一个和上一个按钮设置为这样:
left.setOnClickListener((v) -> mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, true));
right.setOnClickListener((v) -> mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, true));
此外,使用onPageScrolled
您可以为按钮创建一个漂亮的淡入/淡出动画,以阻止它们突然出现在屏幕上。
答案 2 :(得分:1)
要查找ViewPager的当前页面,请使用ViewPager.getCurrentItem()
这是一个代码示例
mViewPager.addOnPageChangeListener(new CustomViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
int currentItem = vpPager.getCurrentItem();
if (currentItem == (vpPager.getAdapter().getCount()-1)) {
right.setVisibility(View.INVISIBLE);
} else {
right.setVisibility(View.VISIBLE);
}
if (currentItem == 0) {
left.setVisibility(View.INVISIBLE);
} else {
left.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
答案 3 :(得分:1)
private int myImagePosition = -1; // class level variable with default value -1.
在用户点击下一个或上一个时设置imageView的可见性 的按钮。强>
myImageViewViewPagerPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (myImagePosition > 0) {
myImagePosition = myImagePosition - 3;
setNextPreviousArrowVisibility();
}
myViewPagerPlanDetailBroucher.setCurrentItem(myImagePosition);
}
});
myImageViewViewPagerNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (myImagePosition < myBroucherDataArrayList.size() - 1) {
myImagePosition = myImagePosition + 3;
setNextPreviousArrowVisibility();
}
myViewPagerPlanDetailBroucher.setCurrentItem(myImagePosition);
}
});
private void setNextPreviousArrowVisibility() {
if (myImagePosition > 3) {
myImageViewViewPagerPrevious.setVisibility(View.VISIBLE);
} else {
myImageViewViewPagerPrevious.setVisibility(View.INVISIBLE);
}
if (myImagePosition > -1 && myImagePosition < myArrayList.size() - 1) {
myImageViewViewPagerNext.setVisibility(View.VISIBLE);
} else {
myImageViewViewPagerNext.setVisibility(View.INVISIBLE);
}
}