3.复杂的viewpager
实现这样的效果:

<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" ><com.itheima.zhbj52.view.NoScrollViewPagerandroid:id="@+id/vp_content"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><RadioGroupandroid:id="@+id/rg_group"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bottom_tab_bg"android:orientation="horizontal" ><RadioButtonandroid:id="@+id/rb_home"style="@style/BottomTabStyle"android:drawableTop="@drawable/btn_tab_home_selector"android:text="首页" /><RadioButtonandroid:id="@+id/rb_news"style="@style/BottomTabStyle"android:drawableTop="@drawable/btn_tab_news_selector"android:text="新闻中心" /><RadioButtonandroid:id="@+id/rb_smart"style="@style/BottomTabStyle"android:drawableTop="@drawable/btn_tab_smart_selector"android:text="智慧服务" /><RadioButtonandroid:id="@+id/rb_gov"style="@style/BottomTabStyle"android:drawableTop="@drawable/btn_tab_gov_selector"android:text="政务" /><RadioButtonandroid:id="@+id/rb_setting"style="@style/BottomTabStyle"android:drawableTop="@drawable/btn_tab_setting_selector"android:text="设置" /></RadioGroup></LinearLayout>
/*** 不能左右划的ViewPager** @author Kevin**/public class NoScrollViewPager extends ViewPager {public NoScrollViewPager(Context context, AttributeSet attrs) {super(context, attrs);}public NoScrollViewPager(Context context) {super(context);}// 表示事件是否拦截, 返回false表示不拦截,否则viewpager里面再有一个viewpager就会不能滑动@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {return false;}/*** 重写onTouchEvent事件,什么都不用做,不滑动*/@Overridepublic boolean onTouchEvent(MotionEvent arg0) {return false;}}
- <style name="BottomTabStyle">
<item name="android:layout_width">wrap_content</item><item name="android:layout_height">wrap_content</item><item name="android:layout_gravity">center_vertical</item><item name="android:button">@null</item>//写成null,RadioButton就没有点只有文字了<item name="android:drawablePadding">3dp</item><item name="android:padding">5dp</item><item name="android:textColor">@drawable/btn_tab_text_selector</item><item name="android:layout_weight">1</item><item name="android:gravity">center</item></style>
public class ContentFragment extends BaseFragment {- //这是注解,xuils自带这个功能,不需要findviewbyid和写各种监听事件
@ViewInject(R.id.rg_group)private RadioGroup rgGroup;- //不用注解的话,记得要找出控件,找了一天这个问题
@ViewInject(R.id.vp_content)private ViewPager mViewPager;private ArrayList<BasePager> mPagerList;@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.fragment_content, null);// rgGroup = (RadioGroup) view.findViewById(R.id.rg_group);ViewUtils.inject(this, view); // 注入view和事件return view;}@Overridepublic void initData() {// 默认勾选首页。这里没有监听事件就可以显示默认勾选首页rgGroup.check(R.id.rb_home);// 初始化5个子页面mPagerList = new ArrayList<BasePager>();// for (int i = 0; i < 5; i++) {// BasePager pager = new BasePager(mActivity);// mPagerList.add(pager);// }mPagerList.add(new HomePager(mActivity));mPagerList.add(new NewsCenterPager(mActivity));mPagerList.add(new SmartServicePager(mActivity));mPagerList.add(new GovAffairsPager(mActivity));mPagerList.add(new SettingPager(mActivity));mViewPager.setAdapter(new ContentAdapter());// 监听RadioGroup的选择事件rgGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId) {case R.id.rb_home:// mViewPager.setCurrentItem(0);// 设置当前页面mViewPager.setCurrentItem(0, false);// 去掉切换页面的动画break;case R.id.rb_news:mViewPager.setCurrentItem(1, false);// 设置当前页面break;case R.id.rb_smart:mViewPager.setCurrentItem(2, false);// 设置当前页面break;case R.id.rb_gov:mViewPager.setCurrentItem(3, false);// 设置当前页面break;case R.id.rb_setting:mViewPager.setCurrentItem(4, false);// 设置当前页面break;default:break;}}});mViewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {mPagerList.get(arg0).initData();// 获取当前被选中的页面, 初始化该页面数据}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});- // 初始化首页数据,得写这一步要不然不显示页面了
mPagerList.get(0).initData();}class ContentAdapter extends PagerAdapter {@Overridepublic int getCount() {return mPagerList.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {BasePager pager = mPagerList.get(position);container.addView(pager.mRootView);// pager.initData();// 初始化数据.... 不要放在此处初始化数据, 否则会预加载下一个页面return pager.mRootView;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}/*** 获取新闻中心页面** @return*/public NewsCenterPager getNewsCenterPager() {return (NewsCenterPager) mPagerList.get(1);}}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/title_red_bg" ><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="智慧北京"android:textColor="#fff"android:textSize="22sp" /><ImageButtonandroid:id="@+id/btn_menu"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:background="@null"//图片就没有背景色了android:src="@drawable/img_menu" /></RelativeLayout><FrameLayoutandroid:id="@+id/fl_content"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" ></FrameLayout></LinearLayout>
public class BasePager {public Activity mActivity;public View mRootView;// 布局对象public TextView tvTitle;// 标题对象public FrameLayout flContent;// 内容public ImageButton btnMenu;// 菜单按钮- //构造函数,让它一创建出来就Activity ,并且初始化界面
public BasePager(Activity activity) {mActivity = activity;initViews();}/*** 初始化布局*/public void initViews() {mRootView = View.inflate(mActivity, R.layout.base_pager, null);tvTitle = (TextView) mRootView.findViewById(R.id.tv_title);flContent = (FrameLayout) mRootView.findViewById(R.id.fl_content);btnMenu = (ImageButton) mRootView.findViewById(R.id.btn_menu);btnMenu.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {toggleSlidingMenu();}});}/*** 切换SlidingMenu的状态** @param b*/protected void toggleSlidingMenu() {MainActivity mainUi = (MainActivity) mActivity;SlidingMenu slidingMenu = mainUi.getSlidingMenu();slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示}/*** 初始化数据*/public void initData() {}/*** 设置侧边栏开启或关闭* TRUE显示,FALSE隐藏* @param enable*/public void setSlidingMenuEnable(boolean enable) {MainActivity mainUi = (MainActivity) mActivity;- //获取到MainActivity,然后getSlidingMenu就能获取侧边栏对象
SlidingMenu slidingMenu = mainUi.getSlidingMenu();if (enable) {slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);} else {slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);}}}
public class HomePager extends BasePager {public HomePager(Activity activity) {super(activity);}@Overridepublic void initData() {System.out.println("初始化首页数据....");tvTitle.setText("智慧北京");// 修改标题// 隐藏菜单按钮图片,不写就显示出来了,在布局文件中是有这个图片按钮的btnMenu.setVisibility(View.GONE);setSlidingMenuEnable(false);//关闭侧边栏TextView text = new TextView(mActivity);text.setText("首页");text.setTextColor(Color.RED);text.setTextSize(25);text.setGravity(Gravity.CENTER);// 向FrameLayout中动态添加布局,这个是下面的标题下面的fargmentflContent.addView(text);}}
3.复杂的viewpager的更多相关文章
- 踩石行动:ViewPager无限轮播的坑
2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...
- Android ViewPager打造3D画廊
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- TabLayout + ViewPager
一.实现思路 1.在build.gradle中添加依赖,例如: compile 'com.android.support:support-v4:23.4.0'compile 'com.android. ...
- android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)
第三节(2):常用控件之ViewPager.日期时间相关.ListView 一.ViewPager 实例:结合PagerAdapter滑动切换图片 二.日期时间相关:AnalogClock\Dig ...
- 简单的ViewPager了解Scroller类
View滑动是自定义ViewGroup中十分常见的一个功能.Android提供了多种View滑动的方法. layout方法 offsetLeftAndRight()与offsetTopAndBotto ...
- PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽
转载请注明出处http://blog.csdn.net/harryweasley/article/details/42290595,谢谢. 以前一直想着,ViewPager中间的那个横线怎么跟着屏幕的 ...
- 详细分析Android viewpager 无限循环滚动图片
由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...
- 一行代码引入 ViewPager 无限循环 + 页码显示
(出处:http://www.cnblogs.com/linguanh) 前序: 网上的这类 ViewPager 很多,但是很多都不够好,体现在 bug多.对少页面不支持,例如1~2张图片.功能整合不 ...
- 使用ViewPager实现自动轮播
很多APP中都实现了类似引导页的自动轮播,不由得想到昨天的引导页上修改一下代码实现轮播. 其实大体上只需要添加一个线程循环执行就可以了. 项目已同步至:https://github.com/nanch ...
随机推荐
- 使用rpm-build制作nginx的rpm包
2014-11-27 11:05:49 一.RPM包的分类 RPM有五种基本的操作功能:安装.卸载.升级.查询和验证. linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i ...
- 引用计数——深拷贝&浅拷贝
下面是用代码实现: private: char *data; size_t use_count; public: //构造函数 String_rep() { if(str == NULL) { dat ...
- yum源解释。。。。。
主要说明下如何配置linux上的本地yum源,主要关于一些原理上的说明. 1.yum是什么,yum源又是什么 在windows上安装一个软件,我们可以通过360管家.因为360管家提供了软 ...
- Python设计模式 - UML - 用例图(Use Case Diagram)
简介 用例图主要是从用户的角度出发对软件产品的功能及执行者进行描述的. 用例图是从需求分析到软件交付的第一步,图示化展示参与者与参与者之间.参与者与用例之间.用例与用例之间的关系,帮助开发人员更好的理 ...
- Linux权限赋予远程连接MySQL
1.mysql -u root -p (root)用户名 2.mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'r ...
- nodejs 箭头函数
背景 箭头函数,出现于ES6规范中. 使用 就是lambda函数. 一般使用: (a, b) => { return a + b; } 简略模式: 当参数只有一个时,可以省略括号:当返回值只有一 ...
- c#: 界面多语言动态切换简单实现
终于有空整理下多语言实现思路.查阅已有方案,有用不同resx文件的,有每个控件动态设置的,有用反射去整的,颇为繁琐. 结合项目中实现方法,并做简化,实现通用的多语言切换方案,以做备忘. 它支持语言自定 ...
- [leetcode]86. Partition List划分链表
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- [leetcode]28. Implement strStr()实现strStr()
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...
- Django实现支付宝支付
一 去支付宝申请 - 正式:营业执照 - 测试: 沙箱测试环境 APPID:2016092000554391 买家: esnrce2727@sandbox.com 登录和支付密码: ...