ViewPager和ResideMenu左右滑动冲突解决方法。
viewpager第0页向右滑动,打开resideMenu,但是有冲突。
*******************************************************************************
解决方法:
左右滑动会先被resideMenu监听到,相对于viewpager来说。
resideMenu.addIgnoredView(viewPager); 相对于viewpager先忽略掉reside的左右滑动
resideMenu.clearIgnoredViewList();清除所有忽略的view,是resideMenu可以左右滑动
resideMenu.removeIgnoredView(viewPager);溢出忽略的viewpager(由于ignoredView是一个list,如果你的addIgonredView中添加了多个viewpager,只会移出最后面添加的)
if (position == 0)
resideMenu.clearIgnoredViewList();
else {
if (resideMenu.getIgnoredViews() != null
&&resideMenu.getIgnoredViews().size()== 0)
resideMenu.addIgnoredView(viewPager);
}
源码:
viewPager.setOnPageChangeListener(newGuidePageChangeListener());
/**
* 滑动监听
*
* @author wuzhenbo
*
*/
class GuidePageChangeListenerimplementsOnPageChangeListener {
@Override
public voidonPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
if (arg0 == 1) {
isScrolling = true;
}else{
isScrolling = false;
}
if (arg0 == 2) {
// notify ....
// if(changeViewCallback!=null){
// changeViewCallback.changeView(left, right);
// }
right = left = false;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
if (isScrolling) {
if (lastValue > arg2) {
// 递减,向右侧滑动
right = true;
left = false;
}elseif(lastValue< arg2) {
// 递减,向右侧滑动
right = false;
left = true;
}elseif(lastValue== arg2) {
right = left = false;
}
}
lastValue = arg2;
}
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
if (position == 0)
resideMenu.clearIgnoredViewList();
else {
if (resideMenu.getIgnoredViews() != null
&&resideMenu.getIgnoredViews().size()== 0)
resideMenu.addIgnoredView(viewPager);
}
// for (int i = 0; i < imageViews.length; i++){
// imageViews[position]
// .setBackgroundResource(R.drawable.ic_launcher);
// // 不是当前选中的page,其小圆点设置为未选中的状态
// if (position != i) {
//imageViews[i].setBackgroundResource(R.drawable.ic_launcher);
// }
// }
}
}