第一次setPageTransformer之后可以正常使用,但是当notifyDataSetChanged之后,其显示就有问题。但是只要viewpager一滑动,PageTransformer的效果就有了。
正常情况下我设置的PageTransformer是这样的,两边没有显示的比较小,而当前位置的显示大:
但是当notifyDataSetChanged之后,显示效果成这个样子了:
不过只要有滑动,显示效果又没问题了。
这是个什么情况,要如何notifyDataSetChanged之后就可以显示PageTransformer的效果?
下面是我的PageTransformer的代码
public class ScalePageTransformer implements ViewPager.PageTransformer {
public static final float MAX_SCALE = 1.2f;
public static final float MIN_SCALE = 0.6f;
@Override
public void transformPage(View page, float position) {
if (position < -1) {
position = -1;
} else if (position > 1) {
position = 1;
}
float tempScale = position < 0 ? 1 + position : 1 - position;
float slope = (MAX_SCALE - MIN_SCALE) / 1;
//一个公式
float scaleValue = MIN_SCALE + tempScale * slope;
page.setScaleX(scaleValue);
page.setScaleY(scaleValue);
}
}
数据每一分钟 轮询一次,然后我获取到我要更新的数据点,然后适配器刷新,就出现上面出现的场景
以下是我适配器 getItemPosition 方法 逻辑,我只刷新当前viewpager所在位置的内容
@Override
public int getItemPosition(Object object) {
View view = (View) object;
int currentPage = ((TempControllerSettingAct) mContext).viewPagerPosition;
if (currentPage == (Integer) view.getTag()) {
return POSITION_NONE;
} else {
return POSITION_UNCHANGED;
}
}
修改适配器的写法,覆盖getItemPosition()方法,当调用notifyDataSetChanged时,让getItemPosition方法人为的返回POSITION_NONE,从而达到强迫viewpager重绘所有item的目的。
具体代码如下:
class SearchAdapter extends PagerAdapter {
}