我想知道ViewPager
的View已经滚动了一半的屏幕吗?如何知道ViewPager滚动了一半的屏幕android
当我拖动它时,如果它覆盖了一半的屏幕,我想更改页面。
例如,如果我在MDPI上进行测试,即屏幕宽度为320px,并且如果我将ViewPager的页面拖动160px,那么我想更改页面。
如何从ViewPager获得视图覆盖的半个距离?
我想知道ViewPager
的View已经滚动了一半的屏幕吗?如何知道ViewPager滚动了一半的屏幕android
当我拖动它时,如果它覆盖了一半的屏幕,我想更改页面。
例如,如果我在MDPI上进行测试,即屏幕宽度为320px,并且如果我将ViewPager的页面拖动160px,那么我想更改页面。
如何从ViewPager获得视图覆盖的半个距离?
使用OnPageChangeListener的方法。如果用户滚动了一半以上的屏幕,则onPageScrolled方法返回positionOffset> 0.5。 http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
我假设你想要更新一些静态视图,当页面滚动一半的屏幕而无需等待它滚动整页宽度。这是我使用onPageScrolled回调的这个问题的解决方案。
@Override
public void onPageScrolled(int position , float positionOffset , int positionOffsetPixels)
{
if (position == mCurrentSelectedScreen)
{
// We are moving to next screen on right side
if (positionOffset > 0.5)
{
// Closer to next screen than to current
if (position + 1 != mNextSelectedScreen)
{
mNextSelectedScreen = position + 1;
updateStaticViewsForScreen(mNextSelectedScreen);
}
}
else
{
// Closer to current screen than to next
if (position != mNextSelectedScreen)
{
mNextSelectedScreen = position;
updateStaticViewsForScreen(mNextSelectedScreen);
}
}
}
else
{
// We are moving to next screen left side
if (positionOffset > 0.5)
{
// Closer to current screen than to next
if (position + 1 != mNextSelectedScreen)
{
mNextSelectedScreen = position + 1;
updateStaticViewsForScreen(mNextSelectedScreen);
}
}
else
{
// Closer to next screen than to current
if (position != mNextSelectedScreen)
{
mNextSelectedScreen = position;
updateStaticViewsForScreen(mNextSelectedScreen);
}
}
}
}
@Override
public void onPageSelected(int arg0)
{
updateStaticViewsForScreen(arg0);
mCurrentSelectedScreen = arg0;
mNextSelectedScreen = arg0;
}
setonpagechangelistner event on view pager。
MyPagerAdapter adapter = new MyPagerAdapter(getApplicationContext());
myPager = (ViewPager)findViewById(R.id.myfivepanelpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
myPager.setOffscreenPageLimit(7);
myPager.setOnPageChangeListener(new MyPageChangeListener());
然后
private class MyPageChangeListener extends ViewPager.SimpleOnPageChangeListener {
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager.SimpleOnPageChangeListener#onPageSelected(int)
*/
@Override
public void onPageSelected(int position) {
focusedPage = position;
switch (focusedPage) {
case 0:
break;
case 1:
Break;
}
}
在这里你可以得到你当前页面的位置。
抱歉打扰你。我不清楚我的问题。我现在更新它,请再次检查它。谢谢 – Manoj
它可以在没有mNextSelectedScreen
的情况下实现。做你想要的setPage()
。
private int mCurrentPage;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == mCurrentPage) {
// It's gone to right.
if (positionOffset > 0.5) {
setPage(position + 1);
}
// Not yet.
else {
setPage(position);
}
} else {
// It's gone to left.
if (positionOffset < 0.5) {
setPage(position);
}
// Not yet.
else {
setPage(position + 1);
}
}
}
@Override
public void onPageSelected(int position) {
mCurrentPage = position;
setPage(position);
}
我同意preious答案,但是当我快速轻扫并释放ViewPager,使用onPageSelected将onPageScrolled之前触发,它会调用updateStaticViewsForScreen 3次,并查看闪烁。 我升级解决方案与记录ViewPager的状态:
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
if(mCurrentPagerState != ViewPager.SCROLL_STATE_SETTLING)
{
// one of previous code of onPageScrolled
}
}
@Override
public void onPageSelected(int position)
{
// one of previous code of onPageSelected
}
@Override
public void onPageScrollStateChanged(int state) {
mCurrentPagerState = state;
}
这解决了我的头痛。非常感谢。这会被认为是一个Android的错误? – TigerHix
您好oLo:需要您的一些想法我必须在滑动viewpager之前检查,如果存在然后从左到右直接进行。我浪费了很多时间来做这件事,但没有得到完美的结果。提前致谢。 –