我想禁用刷卡,但仅限于右侧。我在这个答案中找到了一个有效的解决方案。不幸的是,这复制了整个ViewPager
源代码以实现目标。有没有只继承现有类而不复制的方法?
另一种简单的方法是使用setCurrentItem()在点击某个位置时滚动回所需的幻灯片。例如,这将只允许向前滑动:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
if(position < mProgress) {
mViewPager.setCurrentItem(mProgress, true);
} else {
mProgress = position;
}
}
@Override
public void onPageScrollStateChanged(int state) {}
});
或者,如果您想使用max slide:
if(position > 4) {
mViewPager.setCurrentItem(4, true);
}
此解决方案在技术上不会完全禁用滑动,因为当您进行滑动运动时,您仍然会看到不允许的滑动的一小部分。但对于某些应用,这可能是优选的。
这是一个可以禁用任何方向分页的ViewPager类。在这里查看所有答案。
public class CustomViewPager extends ViewPager {
private float initialXValue;
private SwipeDirection direction;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.direction = SwipeDirection.all;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.IsSwipeAllowed(event)) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.IsSwipeAllowed(event)) {
return super.onInterceptTouchEvent(event);
}
return false;
}
private boolean IsSwipeAllowed(MotionEvent event) {
if(this.direction == SwipeDirection.all) return true;
if(direction == SwipeDirection.none )//disable any swipe
return false;
if(event.getAction()==MotionEvent.ACTION_DOWN) {
initialXValue = event.getX();
return true;
}
if(event.getAction()==MotionEvent.ACTION_MOVE) {
try {
float diffX = event.getX() - initialXValue;
if (diffX > 0 && direction == SwipeDirection.right ) {
// swipe from left to right detected
return false;
}else if (diffX < 0 && direction == SwipeDirection.left ) {
// swipe from right to left detected
return false;
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
return true;
}
public void setAllowedSwipeDirection(SwipeDirection direction) {
this.direction = direction;
}
我不确定这正是您所需要的:我需要一个用于向导的viewpager,该向导具有用户无法通过的最大页面。
最后,解决方案在适配器中。我改变了PagerAdapter的计数,这种方式阻止用户通过最大页面:
@Override
public int getCount() {
return mProgress; //max page + 1
}
当用户进入下一个页面时:
private void setWizardProgress(int progress) {
if(progress > mProgress) {
mProgress = progress;
mWizardPagerAdapter.notifyDataSetChanged();
}
}
这样,当用户处于max page时,他无法向右滚动。
本文向大家介绍Android中Viewpager禁止滑动的实现,包括了Android中Viewpager禁止滑动的实现的使用技巧和注意事项,需要的朋友参考一下 前言 现在很多app,首页不允许滑动切换(因为页面加载吧),但是又用viewpage来管理frgament.因为方便嘛. 以前在网上找的例子: 这个自定义如果继承的Viewpager是低版本的,那么是没问题的. 但是如果你编译时用是高版本的
本文向大家介绍Android之禁止ViewPager滑动实现实例,包括了Android之禁止ViewPager滑动实现实例的使用技巧和注意事项,需要的朋友参考一下 Android之禁止ViewPager滑动实现实例 当我们想在同一个Activity或者Fragment中展示多个页面时往往会用到ViewPager,通过滑动,我们可以很方便地在不同的页面中切换。但是在某些情况下我们可能并不需要通过滑动
我有一个活动,带有一个可视页面,涵盖了整个活动。在这个ViewPager中是一个ListView,它只覆盖片段的底部。ListView可以识别滑动事件(您可以左右滑动项目),但当您想滑动列表项目时,ViewPager会切换页面,因此无法工作。有没有一种简单的方法来解决这个问题,这样ViewPager就不会收到列表中的触摸事件。 谢谢
有没有办法禁用滑动手势来打开导航抽屉?在标签之间滑动时出现菜单真的很烦人。
我想在查看页面2中禁用从右向左滑动。我基本上有一个viewpager2元素,在导航抽屉中有两页。我希望我的第二页仅在单击第一页中的某个元素时显示(从第一页向右向左滑动不应打开第二页),而当我在第二页时,viewpager2滑动(从左向右滑动)应像在viewpager中一样滑动。 我尝试过扩展类并覆盖触摸事件,但不幸的是它是最终类,因此我无法扩展它。 其次,我尝试使用将userinputened设置
本文向大家介绍ViewPager 滑动一半的判断方法以及左滑右滑判断实例,包括了ViewPager 滑动一半的判断方法以及左滑右滑判断实例的使用技巧和注意事项,需要的朋友参考一下 做项目的时候,会碰到用viewpager + fragments去实现多页滑动。有些时候需要完成:界面在滑动到一半或是一半以上的时候,需要把title之类的切换到下一个页面。这个时候仅仅依赖Viewpager的接口是不能