Android 子类化ViewPager会中断动画
在我的Android应用程序中,我有一个活动,它使用一个视图寻呼机来显示4+个页面片段。我通过调用以下命令在每个屏幕上实现了在页面之间移动的按钮:Android 子类化ViewPager会中断动画,android,android-viewpager,android-animation,Android,Android Viewpager,Android Animation,在我的Android应用程序中,我有一个活动,它使用一个视图寻呼机来显示4+个页面片段。我通过调用以下命令在每个屏幕上实现了在页面之间移动的按钮: pager.setCurrentItem(position, true); 查看页面和片段都按照我的要求工作。然后,我开始寻找一种解决方案来禁用用户在页面之间的滑动,以便页面之间的转换仅由按钮处理。我发现的解决方案在一些stackoverflow文章中提到,并且建议将视图寻呼机子类化以拦截触摸事件以禁用刷卡。我遵循这些示例,将view pager类
pager.setCurrentItem(position, true);
查看页面和片段都按照我的要求工作。然后,我开始寻找一种解决方案来禁用用户在页面之间的滑动,以便页面之间的转换仅由按钮处理。我发现的解决方案在一些stackoverflow文章中提到,并且建议将视图寻呼机子类化以拦截触摸事件以禁用刷卡。我遵循这些示例,将view pager类分为以下子类:
public class ViewPager extends android.support.v4.view.ViewPager {
private boolean enabled;
public ViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setSwipingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
使用子类view pager并调用SetWipingEnabledFalse可以按需要工作。用户不能再使用滑动手势在页面之间移动,我仍然可以通过调用setCurrentItemint position,boolean smoothScroll,通过单击按钮在页面之间移动。但是,使用子类会中断页面之间的动画。当我调用setCurrentItemposition时,如果使用android.support.v4.view.ViewPager,我会在页面之间获得非常清晰的滚动动画。当我使用子类进行相同的调用时,屏幕会有一个非常简短的“flash”,然后自动绘制新页面
我想知道如何修复动画,同时保留禁用用户在页面之间滑动的功能。我非常感谢你在这方面的帮助。如果您需要任何其他信息,请告诉我。到目前为止,我已经使用运行2.3.5的三星设备和针对安卓2.3.3的AVD模拟器进行了测试
更新:
我尝试过几件事,希望能幸运地找到解决办法。我查看了我正在扩展的android.support.v4.view.ViewPager的源代码,发现大多数实际的滚动代码都在onTouchEventMotionEvent事件方法中。我没有将其子类化,而是尝试使用普通视图寻呼机,并调用以下命令来使用触摸事件:
pager.setOnTouchListener(new View.onTouchListener() {
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
});
这样做部分奏效。它防止滑动触发滚动到下一个视图。但是,android.support.v4.view.ViewPager中的onInterceptTouchEventMotionEvent事件方法在将触摸事件传递给onTouchEvent方法之前会执行一个小滚动,作为截取的一部分。如果不将ViewPager子类化,我看不到任何改变这种行为的方法