Android ViewPager 里有子ViewPager的事件冲突
在Android应用中有时候要用到类似网易新闻左右滑动页面且页面里又有左右滑动的图片功能,我不知道网易是怎么实现的,本人的做法是外面的BaseFragmentActivity布局就是TabViewPager,布局代码:
1 <com.viewpagerindicator.TabPageIndicator 2 android:id="@+id/news_category_page_indicator" 3 style="@style/StyledIndicators1" 4 android:layout_width="fill_parent" 5 android:layout_height="wrap_content" 6 android:layout_weight="0" 7 android:background="#ffffffff" /> 8 9 <com.aim.maestandard.widget.CustomViewPager 10 android:id="@+id/news_category_page_viewpager" 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" 13 android:layout_weight="1" />
然后调用viewpager的子view是一个Fragment,碎片里的布局有ViewPager来显示多张图片,
直接调用viewpager时,父ViewPager和子ViewPager的事件有冲突。解决方法是冲定义外面的ViewPager,具体代码:
1 public class CustomViewPager extends ViewPager { 2 3 public CustomViewPager(Context context, AttributeSet attrs) { 4 super(context, attrs); 5 } 6 7 @Override 8 protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 9 Log.i("info", String.valueOf(dx) + "--" + String.valueOf(x)); 10 if (v != this && v instanceof GalleryViewPager) { 11 final GalleryViewPager viewPager = (GalleryViewPager) v; 12 int totalCount = viewPager.getAdapter().getCount(); 13 Log.i("info", String.valueOf(viewPager.CurrentPosition) 14 + "==== totalcount:" + String.valueOf(totalCount)); 15 if (dx > 0) {// left sliding 16 if (viewPager.CurrentPosition == 0) { 17 return false; 18 } 19 } else {// right sliding 20 if (viewPager.CurrentPosition + 1 >= totalCount) { 21 return false; 22 } 23 } 24 return true; 25 } 26 27 return super.canScroll(v, checkV, dx, x, y); 28 } 29 }
上几张效果图: