ViewPagerIndicator基础集成

事件拦截,父控件不拦截子控件

/**
 * 不允许滑动的ViewPager
 */
public class NoScrollViewPager extends ViewPager {
   public NoScrollViewPager(Context context) {
      super(context);
   }

   public NoScrollViewPager(Context context, AttributeSet attrs) {
      super(context, attrs);
   }

   // 事件拦截
   @Override
   public boolean onInterceptTouchEvent(MotionEvent ev) {
      return false;// 不拦截子控件的事件
   }

   @Override
   public boolean onTouchEvent(MotionEvent ev) {
      return true;
   }
}


 开源框架ViewPagerIndicator


首先在NewsMenuDetailPager的布局文件中将TabPageIndicator布局上
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></com.viewpagerindicator.TabPageIndicator>

    <android.support.v4.view.ViewPager
        android:id="@+id/vp_news_menu_detail"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></android.support.v4.view.ViewPager>


</LinearLayout>


初始化 mIndicator


@Override
public View initView() {
   View view = View.inflate(mActivity, R.layout.pager_news_menu_detail, null);
   mViewPager = (ViewPager) view.findViewById(R.id.vp_news_menu_detail);
   mIndicator = (TabPageIndicator) view.findViewById(R.id.indicator);
   return view;
}

将viewpager和指示器绑定在一起,必须在viewpager数据设置完毕之后

/**
 * 初始化页签,根据网络返回的数据
 */
@Override
public void initData() {
   mPagers = new ArrayList<>();Z
   for (int i = 0; i < mTabData.size(); i++) {
      TabDetailPager pager = new TabDetailPager(mActivity, mTabData.get(i));
      mPagers.add(pager);
   }
   mViewPager.setAdapter(new NewsMenuDetailAdapter());
   mIndicator.setViewPager(mViewPager);//viewpager和指示器绑定在一起,必须在viewpager数据设置完毕之后
}


在  PagerAdapter  中重写  getPageTitle  方法

/**
 * 制定指示器的标题
 * @param position
 * @return
 */
@Override
public CharSequence getPageTitle(int position) {
   NewsMenu.NewsTabData data = mTabData.get(position);
   return data.title;
}


给MainActivity设置一个主题

<activity
    android:name="activities.MainActivity"
    android:theme="@style/Theme.PageIndicatorDefaults" />

原生背景是黑色的.
可以在MainActivity中将背景再设置成白色

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fl_main"
    android:background="#FFF"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>


/**
 * 新闻菜单详情页
 * ViewwPagerIndicator使用流程
 * 1.引入库
 * 2.解决support-v4冲突
 * 3.从例子程序中拷贝布局文件
 * 4.从例子程序中拷贝相关代码(指示器和viewpager绑定;重写getPageTitle返回标题)
 * 5.在清单文件中增加样式
 * 6.背景修改为白色
 * 7.修改引入库中的样式来设置文字颜色,标签样式等
 */






// 事件分发
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
   // 请求所有父控件及祖宗控件不要拦截事件
   getParent().requestDisallowInterceptTouchEvent(true);
   return super.dispatchTouchEvent(ev);
}


// 事件分发
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
   // 请求所有父控件及祖宗控件不要拦截事件
   getParent().requestDisallowInterceptTouchEvent(true);
   return super.dispatchTouchEvent(ev);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值