ViewPager
ビューが画面の半分までスクロールしたかどうか知りたいですか?
ドラッグしているときに、画面の半分が表示されている場合は、ページを変更します。
たとえば、MDPI、つまり画面幅が320pxでテストしていて、ViewPagerのページを160pxドラッグした場合、ページを変更したいとします。
ViewPagerからのビューでこの半分の距離をカバーするにはどうすればよいですか?
ViewPager
ビューが画面の半分までスクロールしたかどうか知りたいですか?
ドラッグしているときに、画面の半分が表示されている場合は、ページを変更します。
たとえば、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;
}
以前の回答に同意しますが、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;
}
それはなしで達成することができます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);
}
ビューページャーのsetonpagechangelistnerイベント。
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;
}
}
ここで、現在のページの位置を取得できます。