一、简要介绍
原文参考:微信4.2滑动Tab
仿微信4.2滑动Tab效果,主要是利用ViewPager、Fragment以及开源项目BadgeView实现。
二、具体使用步骤
1、ViewPagerr用于实现多页面的切换效果,该类存在于Google的兼容包android-support-v4.jar里面。具体使用,分三个步骤:
a:布局文件中添加,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/navigation" /> <-- 添加ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/main_view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
|
b:为ViewPager添加需要显示的页面,这里使用的是继承自Fragment的View,代码如下:
1 2 3 4 5 6 7 8
| public class Page1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.page1, container, false); } }
|
1 2 3 4
| mPages = new ArrayList<Fragment>(); mPages.add(new Page1()); mPages.add(new Page2()); mPages.add(new Page3());
|
c:实例化PageAdapter,并为ViewPager加载PageAdapter,这里我们使用的是FragmentPagerAdapter代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()){ @Override public int getCount() { return mPages.size(); } @Override public Fragment getItem(int arg0) { return mPages.get(arg0); } }; mViewPager.setAdapter(mAdapter);
|
需要实现滑动的时候动画效果,还需要使用监听ViewPager滑动事件,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int arg0) { initColor(); switch (arg0) { case 0: tView1.setTextColor(Color.parseColor("#008000")); break; case 1: tView2.setTextColor(Color.parseColor("#008000")); break; case 2: tView3.setTextColor(Color.parseColor("#008000")); break; default: break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mLine.getLayoutParams(); layoutParams.leftMargin = arg0 * oneWidth + (int)(arg1 * oneWidth); mLine.setLayoutParams(layoutParams); } @Override public void onPageScrollStateChanged(int arg0) { } });
|
2、BadgeView的使用
BadgeView用于显示消息提醒数目标记,使用方法很简单:实例化BadgeView对象-设置相关属性-设置消息数目-将该BadgeView添加到要显示的View中,示例代码如下:
1 2 3
| mBadgeView = new BadgeView(this); mBadgeView.setBadgeCount(17); mLinearLayout.addView(mBadgeView);
|
三、完整代码
https://github.com/whilu/AndroidUtils/tree/master/WeChatTabDemo