Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 子类化ViewPager会中断动画_Android_Android Viewpager_Android Animation - Fatal编程技术网

Android 子类化ViewPager会中断动画

Android 子类化ViewPager会中断动画,android,android-viewpager,android-animation,Android,Android Viewpager,Android Animation,在我的Android应用程序中,我有一个活动,它使用一个视图寻呼机来显示4+个页面片段。我通过调用以下命令在每个屏幕上实现了在页面之间移动的按钮: pager.setCurrentItem(position, true); 查看页面和片段都按照我的要求工作。然后,我开始寻找一种解决方案来禁用用户在页面之间的滑动,以便页面之间的转换仅由按钮处理。我发现的解决方案在一些stackoverflow文章中提到,并且建议将视图寻呼机子类化以拦截触摸事件以禁用刷卡。我遵循这些示例,将view pager类

在我的Android应用程序中,我有一个活动,它使用一个视图寻呼机来显示4+个页面片段。我通过调用以下命令在每个屏幕上实现了在页面之间移动的按钮:

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子类化,我看不到任何改变这种行为的方法