Sik*_*ior 11 android android-viewpager
我无法弄清楚如何在视图寻呼机的最后一页上捕获滑动事件.
基本上要求是当用户在最后一页上,并且他们尝试滑动以进入下一页时,活动应该关闭.
我已经尝试过onPageScrolled,但我似乎无法在那里区分左或右滑动.在最后一页上,用户仍应保留移动到上一页的功能.
所以基本上就是这样
When on last page
if swipe prev (do normal behaviour)
if swipe next (finish activity)
Run Code Online (Sandbox Code Playgroud)
有人可以提供任何建议吗?谢谢
Kis*_*ava 14
这是工作解决方案!!
必需的变量
....
private boolean isLastPageSwiped;
private int counterPageScroll;
....
Run Code Online (Sandbox Code Playgroud)
在ViewPager的onPageScrolled里面
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//Here 6 is last position
if (position == 6 && positionOffset == 0 && !isLastPageSwiped){
if(counterPageScroll != 0){
isLastPageSwiped=true;
//Next Activity here
}
counterPageScroll++;
}else{
counterPageScroll=0;
}
}
Run Code Online (Sandbox Code Playgroud)
tas*_*iac 11
你应该ViewPager在你的实际最后一页上刷一个虚假的空白页面,这是假的.当这个假的可见时完成了Activity.
你应该尝试这种方式,如果它不起作用,我可以给你一个示例代码.
我可能真的很晚了,但这可能会帮助其他人下线.我从stackoverflow上的一个问题得到了片段,其中我只是稍微调整一下代码.
从这里回答.
ViewPager.OnPageChangeListener pagerListener = new ViewPager.OnPageChangeListener() {
boolean lastPageChange = false;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){
int lastIdx = mPgScreenAdapter.getCount() - 1;
Log.d(TAG, "pos:" + position);
if(lastPageChange && position == lastIdx) {}
}
@Override
public void onPageSelected( int i) {
pgText.setCurrentItem(i/2);
}
@Override
public void onPageScrollStateChanged(int state) {
int lastIdx = mPgScreenAdapter.getCount() - 1;
int curItem = pgScreen.getCurrentItem();
if(curItem==lastIdx && state==1){
lastPageChange = true;
// i put this here since onPageScroll gets called a couple of times.
finish();
}else {
lastPageChange = false;
}
}
};
Run Code Online (Sandbox Code Playgroud)
int lastPosition;
int currentPosition;
//View pager assign
ViewPager viewPager = findViewById(R.id.viewPager);
//PageIndicatorView external https://github.com/romandanylyk
PageIndicatorView pageIndicatorView = findViewById(R.id.pageIndicatorView);
//customise pageIndicatorView design
pageIndicatorView.setAnimationType(AnimationType.THIN_WORM);
pageIndicatorView.setViewPager(viewPager);
//BannerAdapter is an custom adapter for viewpage i made.
//assign data here
BannerAdapter pagerAdapter = new BannerAdapter(this, banner, new OnClickListener() {
@Override
public void onClick() {
}
});
viewPager.setAdapter(pagerAdapter);
//listener for View Pager
//this is where process of making the infinite loop
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//assign position so that can be manipulated
currentPosition = position;
}
@Override
public void onPageSelected(int position) {
//set pager indicator position here
pageIndicatorView.setSelection(position);
}
@Override
public void onPageScrollStateChanged(int state) {
//check state 0 mean no ongoing process
if(state == 0){
//check currentPosition == lastPosition to detect that scroll cant scroll anymore
if(currentPosition == lastPosition){
int lastitem = banner.size() - 1;
//check position if either last item/first item
//and set viewpager current page as follow
if(currentPosition == lastitem){
viewPager.setCurrentItem(0);
}else if(currentPosition == 0){
viewPager.setCurrentItem(lastitem);
}
}else{
lastPosition = currentPosition;
}
Log.d("ScrollState", "currentPosition: " + currentPosition);
}
/*empty*/
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12226 次 |
| 最近记录: |