viewpager 中 2 个页面之间的转换不能顺利进行
Transition between 2 page in viewpager not work smoothly
我在 viewpager 上工作有 3 个片段,我也有 3 个操作栏选项卡。
我可以通过单击选项卡或在选项卡下方滑动来更改页面。
如果 :
动画工作非常流畅
- 我通过单击操作栏选项卡更改页面
- 如果我的手指向左或向右缓慢移动以换页
- 如果我的手指移动缓慢,然后将我的手指从屏幕上移开(返回到上一个屏幕)
但问题是当我快速滑动手指时,上一页和下一页之间的转换有一些停滞的瞬间,虽然它只有不到 1 秒。
我只使用普通的 viewpager 和自定义滚动条来减慢动画速度。这是我的代码
主要活动:
viewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(3);
try {
Field mScroller;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
myScroller scroller = new myScroller(viewPager.getContext(), new DecelerateInterpolator());
mScroller.set(viewPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
我需要帮助才能使页面之间的转换顺利进行,如果可能的话,我不想使用来自外部的额外库(例如:jazzy view pager)。
提前致谢
编辑:添加滚动条class
public class myScroller extends Scroller {
private int mDuration = 400;
public myScroller(Context context) {
super(context);
}
public myScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public myScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
下面是您正在寻找的相同实现的一些很好的工作示例。
终于找到问题了,
这是我的旧代码的条件:
我有 2 页列表视图。当我滑动它时,我会在第二页上再次加载我的列表视图。
当我删除我的代码以加载所有列表视图时,页面之间的转换工作顺畅。它似乎先加载列表视图然后加载动画页面更改。
我在 viewpager 上工作有 3 个片段,我也有 3 个操作栏选项卡。 我可以通过单击选项卡或在选项卡下方滑动来更改页面。
如果 :
动画工作非常流畅- 我通过单击操作栏选项卡更改页面
- 如果我的手指向左或向右缓慢移动以换页
- 如果我的手指移动缓慢,然后将我的手指从屏幕上移开(返回到上一个屏幕)
但问题是当我快速滑动手指时,上一页和下一页之间的转换有一些停滞的瞬间,虽然它只有不到 1 秒。
我只使用普通的 viewpager 和自定义滚动条来减慢动画速度。这是我的代码
主要活动:
viewPager = (ViewPager) findViewById(R.id.pager);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(3);
try {
Field mScroller;
mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
myScroller scroller = new myScroller(viewPager.getContext(), new DecelerateInterpolator());
mScroller.set(viewPager, scroller);
} catch (NoSuchFieldException e) {
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
我需要帮助才能使页面之间的转换顺利进行,如果可能的话,我不想使用来自外部的额外库(例如:jazzy view pager)。 提前致谢
编辑:添加滚动条class
public class myScroller extends Scroller {
private int mDuration = 400;
public myScroller(Context context) {
super(context);
}
public myScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public myScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
}
}
下面是您正在寻找的相同实现的一些很好的工作示例。
终于找到问题了,
这是我的旧代码的条件: 我有 2 页列表视图。当我滑动它时,我会在第二页上再次加载我的列表视图。
当我删除我的代码以加载所有列表视图时,页面之间的转换工作顺畅。它似乎先加载列表视图然后加载动画页面更改。