我有一个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) {
}
});
答案 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。