[英]Disable ViewPager Swipe From Right To Left and Left To Right Side
I am using ViewPager in one of my android application. 我在我的一个Android应用程序中使用ViewPager。 I am learning yet Android and so does not know much about it. 我正在学习Android,因此对此了解不多。 I want disable swipe from left to right and right to left on position based. 我想基于位置禁用从左向右和从右向左滑动。 I have searched in stackoverflow for solution but not got any proper solution. 我在stackoverflow中搜索了解决方案,但没有任何合适的解决方案。 I am attaching my code here. 我在这里附上我的代码。 Let me know if someone can help me to solve this puzzle. 让我知道是否有人可以帮助我解决这个难题。
My ViewPager 我的ViewPager
adapter = new MyAdapter(getSupportFragmentManager());
viewPager.setOffscreenPageLimit(0);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
constant.new_ad_count = constant.new_ad_count + 1;
mItemIndx = position;
try {
int index = position % ITEMS_PER_PAGE;
currentQuote = quotes.get(index);
} catch
(Exception e) {
}
mPageIndx = ((position + 1) / ITEMS_PER_PAGE) + (((position + 1) % ITEMS_PER_PAGE) > 0 ? 1 : 0);
updateUI();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(mItemIndx);
updateUI();
}
Function From Which I want Disable Swipe 我要禁用的功能
private void updateUI() {
lblLikeCount.setText(currentQuote.getQuLike());
lblShareCount.setText(currentQuote.getQuShare());
lblTime.setText(currentQuote.getQuTime());
textPageCount.setText((mItemIndx + 1) + " / " + totalSize);
// butNext.setVisibility((mItemIndx < totalSize - 1) ? View.VISIBLE : View.INVISIBLE);
butPrev.setVisibility((mItemIndx > 0) ? View.VISIBLE : View.INVISIBLE);
if(mItemIndx==totalSize-1||(mItemIndx+1)%ITEMS_PER_PAGE==0) {
butNext.setVisibility(View.INVISIBLE);
//I want Disable Right to Left Swipe Here
} else {
butNext.setVisibility(View.VISIBLE);
}
if (mItemIndx-1<0 ||(mItemIndx)%ITEMS_PER_PAGE==0) {
butPrev.setVisibility(View.INVISIBLE);
//I want Disable Left to Right Here
} else {
butPrev.setVisibility(View.VISIBLE);
}
}
Thanks a lot Friends :) 非常感谢朋友:)
Use a this NonSwipableViewPager
class, using this, you will only be able to change the page when calling setCurrentItem
. 使用此NonSwipableViewPager
类,使用此类,仅在调用setCurrentItem
时才能更改页面。
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
Add this class to your project, then in the layout where you want it, replace ViewPager
with: 将该类添加到您的项目中,然后在所需的布局中,将ViewPager
替换为:
<yourpackagename.NonSwipeableViewPager
Then initialise it in your Activity or Fragment: 然后在“活动”或“片段”中将其初始化:
NonSwipeableViewPager pager = (NonSwipeableViewPager) findViewById(R.id.pager);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.