Ngu*_*inh 28 android android-viewpager
我正在使用ViewPager(支持库).我想知道每次ViewPager更改可见页面时,它都向左或向右滚动.
请给我一个解决方案.欢迎任何推荐.
谢谢
Moh*_*eem 40
设置setOnPageChangeListener为你的ViewPager
并在
private int lastPosition = 0;
Run Code Online (Sandbox Code Playgroud)
Gui*_*lhE 36
这不是一个完美的解决方案,但是这是一种在开始滑动时检查滑动方向的方法:
new ViewPager.OnPageChangeListener() {
private static final float thresholdOffset = 0.5f;
private boolean scrollStarted, checkDirection;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (checkDirection) {
if (thresholdOffset > positionOffset) {
Log.i(C.TAG, "going left");
} else {
Log.i(C.TAG, "going right");
}
checkDirection = false;
}
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {
if (!scrollStarted && state == ViewPager.SCROLL_STATE_DRAGGING) {
scrollStarted = true;
checkDirection = true;
} else {
scrollStarted = false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:有一个更优雅的方法,涉及使用ViewPager.PageTransformer和检查它的位置间隔:
...
myViewPager.setPageTransformer(true, new PageTransformer());
...
public class PageTransformer implements ViewPager.PageTransformer {
public void transformPage(View view, float position) {
if (position < -1) {
// [-00,-1): the page is way off-screen to the left.
} else if (position <= 1) {
// [-1,1]: the page is "centered"
} else {
// (1,+00]: the page is way off-screen to the right.
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以从以下方面了解更多信息:使用ViewPager进行屏幕幻灯片
小智 6
与GuilhE相同的解决方案,带有一个小修复,以避免在ViewPager中第一页(左侧没有页面)向左翻页(向右滑动)时出现误报.它只是进行额外的检查,以确定滑动是否实际上已移动.
new ViewPager.OnPageChangeListener() {
private static final float thresholdOffset = 0.5f;
private static final int thresholdOffsetPixels = 1;
private boolean scrollStarted, checkDirection;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (checkDirection) {
if (thresholdOffset > positionOffset && positionOffsetPixels > thresholdOffsetPixels) {
Log.i(C.TAG, "going left");
} else {
Log.i(C.TAG, "going right");
}
checkDirection = false;
}
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {
if (!scrollStarted && state == ViewPager.SCROLL_STATE_DRAGGING) {
scrollStarted = true;
checkDirection = true;
} else {
scrollStarted = false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32805 次 |
| 最近记录: |