zoukankan      html  css  js  c++  java
  • 3.复杂的viewpager

    实现这样的效果:
    1.主页面布局
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:tools="http://schemas.android.com/tools"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical" >
    6. <com.itheima.zhbj52.view.NoScrollViewPager
    7. android:id="@+id/vp_content"
    8. android:layout_width="match_parent"
    9. android:layout_height="0dp"
    10. android:layout_weight="1" />
    11. <RadioGroup
    12. android:id="@+id/rg_group"
    13. android:layout_width="match_parent"
    14. android:layout_height="wrap_content"
    15. android:background="@drawable/bottom_tab_bg"
    16. android:orientation="horizontal" >
    17. <RadioButton
    18. android:id="@+id/rb_home"
    19. style="@style/BottomTabStyle"
    20. android:drawableTop="@drawable/btn_tab_home_selector"
    21. android:text="首页" />
    22. <RadioButton
    23. android:id="@+id/rb_news"
    24. style="@style/BottomTabStyle"
    25. android:drawableTop="@drawable/btn_tab_news_selector"
    26. android:text="新闻中心" />
    27. <RadioButton
    28. android:id="@+id/rb_smart"
    29. style="@style/BottomTabStyle"
    30. android:drawableTop="@drawable/btn_tab_smart_selector"
    31. android:text="智慧服务" />
    32. <RadioButton
    33. android:id="@+id/rb_gov"
    34. style="@style/BottomTabStyle"
    35. android:drawableTop="@drawable/btn_tab_gov_selector"
    36. android:text="政务" />
    37. <RadioButton
    38. android:id="@+id/rb_setting"
    39. style="@style/BottomTabStyle"
    40. android:drawableTop="@drawable/btn_tab_setting_selector"
    41. android:text="设置" />
    42. </RadioGroup>
    43. </LinearLayout>
    因为不想让侧边栏每个页面都跑出来可以设置它不能滑动,这是一个自定义view,所以写全称。有点页面需要能滑出来,在代码中实现。注意:这俩个构造函数缺一不可
    1. /**
    2. * 不能左右划的ViewPager
    3. *
    4. * @author Kevin
    5. *
    6. */
    7. public class NoScrollViewPager extends ViewPager {

    8. public NoScrollViewPager(Context context, AttributeSet attrs) {
    9. super(context, attrs);
    10. }
    11. public NoScrollViewPager(Context context) {
    12. super(context);
    13. }
    14. // 表示事件是否拦截, 返回false表示不拦截,否则viewpager里面再有一个viewpager就会不能滑动
    15. @Override
    16. public boolean onInterceptTouchEvent(MotionEvent arg0) {
    17. return false;
    18. }
    19. /**
    20. * 重写onTouchEvent事件,什么都不用做,不滑动
    21. */
    22. @Override
    23. public boolean onTouchEvent(MotionEvent arg0) {
    24. return false;
    25. }
    26. }
    底栏RadioButton的样式
    1. <style name="BottomTabStyle">
    2. <item name="android:layout_width">wrap_content</item>
    3. <item name="android:layout_height">wrap_content</item>
    4. <item name="android:layout_gravity">center_vertical</item>
    5. <item name="android:button">@null</item>//写成null,RadioButton就没有点只有文字了
    6. <item name="android:drawablePadding">3dp</item>
    7. <item name="android:padding">5dp</item>
    8. <item name="android:textColor">@drawable/btn_tab_text_selector</item>
    9. <item name="android:layout_weight">1</item>
    10. <item name="android:gravity">center</item>
    11. </style>

    2.主界面

    1. public class ContentFragment extends BaseFragment {
    2. //这是注解,xuils自带这个功能,不需要findviewbyid和写各种监听事件
    3. @ViewInject(R.id.rg_group)
    4. private RadioGroup rgGroup;
    5. //不用注解的话,记得要找出控件,找了一天这个问题
    6. @ViewInject(R.id.vp_content)
    7. private ViewPager mViewPager;
    8. private ArrayList<BasePager> mPagerList;
    9. @Override
    10. public View initViews() {
    11. View view = View.inflate(mActivity, R.layout.fragment_content, null);
    12. // rgGroup = (RadioGroup) view.findViewById(R.id.rg_group);
    13. ViewUtils.inject(this, view); // 注入view和事件
    14. return view;
    15. }
    16. @Override
    17. public void initData() {
    18. // 默认勾选首页。这里没有监听事件就可以显示默认勾选首页
    19. rgGroup.check(R.id.rb_home);
    20. // 初始化5个子页面
    21. mPagerList = new ArrayList<BasePager>();
    22. // for (int i = 0; i < 5; i++) {
    23. // BasePager pager = new BasePager(mActivity);
    24. // mPagerList.add(pager);
    25. // }
    26. mPagerList.add(new HomePager(mActivity));
    27. mPagerList.add(new NewsCenterPager(mActivity));
    28. mPagerList.add(new SmartServicePager(mActivity));
    29. mPagerList.add(new GovAffairsPager(mActivity));
    30. mPagerList.add(new SettingPager(mActivity));
    31. mViewPager.setAdapter(new ContentAdapter());
    32. // 监听RadioGroup的选择事件
    33. rgGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    34. @Override
    35. public void onCheckedChanged(RadioGroup group, int checkedId) {
    36. switch (checkedId) {
    37. case R.id.rb_home:
    38. // mViewPager.setCurrentItem(0);// 设置当前页面
    39. mViewPager.setCurrentItem(0, false);// 去掉切换页面的动画
    40. break;
    41. case R.id.rb_news:
    42. mViewPager.setCurrentItem(1, false);// 设置当前页面
    43. break;
    44. case R.id.rb_smart:
    45. mViewPager.setCurrentItem(2, false);// 设置当前页面
    46. break;
    47. case R.id.rb_gov:
    48. mViewPager.setCurrentItem(3, false);// 设置当前页面
    49. break;
    50. case R.id.rb_setting:
    51. mViewPager.setCurrentItem(4, false);// 设置当前页面
    52. break;
    53. default:
    54. break;
    55. }
    56. }
    57. });
    58. mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    59. @Override
    60. public void onPageSelected(int arg0) {
    61. mPagerList.get(arg0).initData();// 获取当前被选中的页面, 初始化该页面数据
    62. }
    63. @Override
    64. public void onPageScrolled(int arg0, float arg1, int arg2) {
    65. }
    66. @Override
    67. public void onPageScrollStateChanged(int arg0) {
    68. }
    69. });
    70. // 初始化首页数据,得写这一步要不然不显示页面了
    71. mPagerList.get(0).initData();
    72. }
    73. class ContentAdapter extends PagerAdapter {
    74. @Override
    75. public int getCount() {
    76. return mPagerList.size();
    77. }
    78. @Override
    79. public boolean isViewFromObject(View arg0, Object arg1) {
    80. return arg0 == arg1;
    81. }
    82. @Override
    83. public Object instantiateItem(ViewGroup container, int position) {
    84. BasePager pager = mPagerList.get(position);
    85. container.addView(pager.mRootView);
    86. // pager.initData();// 初始化数据.... 不要放在此处初始化数据, 否则会预加载下一个页面
    87. return pager.mRootView;
    88. }
    89. @Override
    90. public void destroyItem(ViewGroup container, int position, Object object) {
    91. container.removeView((View) object);
    92. }
    93. }
    94. /**
    95. * 获取新闻中心页面
    96. *
    97. * @return
    98. */
    99. public NewsCenterPager getNewsCenterPager() {
    100. return (NewsCenterPager) mPagerList.get(1);
    101. }
    102. }
    3.各个子页面
    base_pager布局
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent"
    4. android:orientation="vertical" >
    5. <RelativeLayout
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:background="@drawable/title_red_bg" >
    9. <TextView
    10. android:id="@+id/tv_title"
    11. android:layout_width="wrap_content"
    12. android:layout_height="wrap_content"
    13. android:layout_centerHorizontal="true"
    14. android:layout_centerVertical="true"
    15. android:text="智慧北京"
    16. android:textColor="#fff"
    17. android:textSize="22sp" />
    18. <ImageButton
    19. android:id="@+id/btn_menu"
    20. android:layout_width="wrap_content"
    21. android:layout_height="wrap_content"
    22. android:layout_centerVertical="true"
    23. android:layout_marginLeft="5dp"
    24. android:background="@null"//图片就没有背景色了
    25. android:src="@drawable/img_menu" />
    26. </RelativeLayout>
    27. <FrameLayout
    28. android:id="@+id/fl_content"
    29. android:layout_width="match_parent"
    30. android:layout_height="0dp"
    31. android:layout_weight="1" >
    32. </FrameLayout>
    33. </LinearLayout>
    子页面的共性抽成一个基类,让子页面继承它
    1. public class BasePager {
    2. public Activity mActivity;
    3. public View mRootView;// 布局对象
    4. public TextView tvTitle;// 标题对象
    5. public FrameLayout flContent;// 内容
    6. public ImageButton btnMenu;// 菜单按钮
    7. //构造函数,让它一创建出来就Activity ,并且初始化界面
    8. public BasePager(Activity activity) {
    9. mActivity = activity;
    10. initViews();
    11. }
    12. /**
    13. * 初始化布局
    14. */
    15. public void initViews() {
    16. mRootView = View.inflate(mActivity, R.layout.base_pager, null);
    17. tvTitle = (TextView) mRootView.findViewById(R.id.tv_title);
    18. flContent = (FrameLayout) mRootView.findViewById(R.id.fl_content);
    19. btnMenu = (ImageButton) mRootView.findViewById(R.id.btn_menu);
    20. btnMenu.setOnClickListener(new OnClickListener() {
    21. @Override
    22. public void onClick(View v) {
    23. toggleSlidingMenu();
    24. }
    25. });
    26. }
    27. /**
    28. * 切换SlidingMenu的状态
    29. *
    30. * @param b
    31. */
    32. protected void toggleSlidingMenu() {
    33. MainActivity mainUi = (MainActivity) mActivity;
    34. SlidingMenu slidingMenu = mainUi.getSlidingMenu();
    35. slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示
    36. }
    37. /**
    38. * 初始化数据
    39. */
    40. public void initData() {
    41. }
    42. /**
    43. * 设置侧边栏开启或关闭
    44. * TRUE显示,FALSE隐藏
    45. * @param enable
    46. */
    47. public void setSlidingMenuEnable(boolean enable) {
    48. MainActivity mainUi = (MainActivity) mActivity;
    49. //获取到MainActivity,然后getSlidingMenu就能获取侧边栏对象
    50. SlidingMenu slidingMenu = mainUi.getSlidingMenu();
    51. if (enable) {
    52. slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    53. } else {
    54. slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
    55. }
    56. }
    57. }
    子布局
    1. public class HomePager extends BasePager {
    2. public HomePager(Activity activity) {
    3. super(activity);
    4. }
    5. @Override
    6. public void initData() {
    7. System.out.println("初始化首页数据....");
    8. tvTitle.setText("智慧北京");// 修改标题
    9. // 隐藏菜单按钮图片,不写就显示出来了,在布局文件中是有这个图片按钮的
    10. btnMenu.setVisibility(View.GONE);
    11. setSlidingMenuEnable(false);//关闭侧边栏
    12. TextView text = new TextView(mActivity);
    13. text.setText("首页");
    14. text.setTextColor(Color.RED);
    15. text.setTextSize(25);
    16. text.setGravity(Gravity.CENTER);
    17. // 向FrameLayout中动态添加布局,这个是下面的标题下面的fargment
    18. flContent.addView(text);
    19. }
    20. }






  • 相关阅读:
    mysql -- 字符串子串
    eclipse 快捷键
    eclipse git --- add to index
    eclipse -- git 同步
    jquery
    烂泥:KVM、kickstart与NFS集成
    烂泥:KVM与kickstart集成
    烂泥:kickstart无人值守安装CentOS6.5
    烂泥:【解决】Ubuntu下使用SSH连接centos系统很慢
    烂泥:CentOS安装及配置TFTP服务器
  • 原文地址:https://www.cnblogs.com/sixrain/p/4915586.html
Copyright © 2011-2022 走看看