ViewPager中途滚动回调

时间:2014-09-11 22:21:53

标签: android android-viewpager

我有一个ViewPager及以上版本,ViewPager是一个TextView。当我在ViewPager中更改页面时,TextView应根据新页面的内容更新其文本。

我在我的ViewPager的OnPageChangeListener的onPageSelected方法中调用了setText方法。它很棒!

现在我想添加一点动画。在滑动的同时,文本应该淡出,当它在中途时,它应该随着新文本的消失而消失。我设法为文本做了alpha动画。但是,文字正在改变 文本已经消退。我想在文本不可见时(滚动的一半)更改文本。

有任何帮助吗?这是我的代码:

weekPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int index) {
            //update the text
            weekText.setText(DateTimeUtils.getWeekDescription(index));
        }

        @Override
        public void onPageScrolled(int arg0, float ratio, int arg2) {
            //do the alpha animation
            weekText.setAlpha(Math.abs(2f * (ratio - .5f)));
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });

1 个答案:

答案 0 :(得分:0)

你可以试试这样的事情

在你的活动中声明这些变种

private int mIndex = 0;
private int lastIndex = 0;
private float mStartDragX = 0;

然后

@Override
public void onPageScrolled(int arg0, float ratio, int arg2) {
        //do the alpha animation
        float alpha = 2f * (ratio - .5f);
        weekText.setAlpha(Math.abs(alpha));

        //If the text hasn't been set and ratio is at least halfway from 0 -> 1
        // alpha should be near 0, ideally exactly 0
        if((mIndex != lastIndex) && (alpha >= 0))
        {
           weekText.setText(DateTimeUtils.getWeekDescription(mIndex));
           lastIndex = mIndex;
        }
}

编辑: 为了正确设置mIndex,你需要做一些额外的工作。

从这个问题How to get current swipe direction in action in ViewPager

似乎有一种方法是ViewPager的onTouchListener,我不确定它是否能完美运行但是值得一试。

myPager.setOnTouchListener(new ViewPager.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();

        switch(event.getAction()){
        case MotionEvent.ACTION_DOWN:
            mStartDragX = x;
            break;
        case MotionEvent.ACTION_MOVE:
            if (event.getX() > mStartDragX )
            {
                Log.i(TAG,"SWIPING RIGHT - Selecting page to the left");
                if(mIndex == lastIndex)
                   mIndex--;
            } else if (event.getX() < mStartDragX)
            {
                Log.i(TAG,"SWIPING LEFT - Selecting page to the right");
                if(mIndex == lastIndex)
                   mIndex++;
            }
            break;
        }
        return false;
    }
});

如果你有一个标签栏,你还必须在用户按下那些按钮时设置mIndex。