• 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 }

      上几张效果图:
     

     

  • 相关阅读:
    linux系统中不同颜色的文件夹及根目录介绍
    linux命令学习 随笔
    Happiness
    Sequence Number
    base64加密解密c++代码
    Wooden Sticks
    出租车费
    关系推断
    如何在Ubuntu中安装中文输入法
    c语言中printf("%x",-1);为什么会输出-1的十六进制补码??
  • 原文地址:https://www.cnblogs.com/phj981805903/p/3246214.html
Copyright © 2020-2023  润新知