ViewPager+FragmentTabHost
来源:互联网 发布:易成运营商数据分析 编辑:程序博客网 时间:2024/06/13 05:43
普通的ViewPager的使用
使用方法参考listview1.在布局中使用support.v4包下的viewpager控件 <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </android.support.v4.view.ViewPager>vp = (ViewPager) findViewById(R.id.vp); 2.创建PagerAdapter的子类必须实现如下四个方法public class MyPagerAdapter extends PagerAdapter { List<View>datas; public MyPagerAdapter(List<View> datas) { this.datas = datas; } @Override public int getCount() { return datas.size(); } //通过该方法开确定要展示哪个view @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = datas.get(position); container.addView(view); //这个view就是isViewFromObject中的第二个参数 return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(datas.get(position)); }}3.展示数据//调用vp.setadapter方法展示vp.setadater(adapter);
FragmentViewPager的使用
需要先介绍一下fragmentadapter有两种,分别是FragmentStatePagerAdapter和FragmentPagerAdapter;FragmentStatePagerAdapter 和前面的 FragmentPagerAdapter 一样,是继承子 PagerAdapter。但是,和 FragmentPagerAdapter 不一样的是,正如其类名中的 'State' 所表明的含义一样,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;简单的说就是fragment被隐藏后FragmentStatePagerAdapter 会调用fragment的destroy方法,而FragmentPagerAdapter不会;前者适合有大量大framgent中使用;
//也可以改成继承于FragmentPagerAdapter public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter { List<Fragment> mDatas; //相比于pageradapter,不需要实现instantiateItem()destroyItem() public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> datas) { super(fm); mDatas=datas; } @Override public int getCount() { return mDatas.size(); } @Override public Fragment getItem(int position) { return mDatas.get(position); }}
设置监听器
viewPager.setAdapter(new MyViewPagerAdapter(views));//设置当前打开的页面是第几个viewPager.setCurrentItem(0);viewPager.setOnPageChangeListener(new MyOnPageChangeListener());//设置页面切换的监听
设置viewpager的切换动画效果
1.谷歌的demopublic class DepthPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.75f; public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } else if (position <= 1) { // (0,1] // Fade the page out. view.setAlpha(1 - position); // Counteract the default slide transition view.setTranslationX(pageWidth * -position); // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } }}2.//第一个参数为false表示当进入和退出动画重叠时,能同时显示,不会被遮盖vp.setPageTransformer(true,new Translate());
FragmentTabHost的使用
布局<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" tools:context="com.junx.tabhost.MainActivity"> <FrameLayout //用于显示fragment android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#F00" > </FrameLayout> //底部导航栏 <android.support.v4.app.FragmentTabHost android:id="@+id/tab_frag" android:layout_width="match_parent" android:layout_height="100dp"> </android.support.v4.app.FragmentTabHost></LinearLayout>
代码: String tabs[] = new String[]{"哈哈1", "哈哈2", "哈哈3"}; Class classes[]={ItemFragment1.class,ItemFragment2.class,ItemFragment3.class}; private void show() { //将tab和展示不同fragment的fl绑定 tab_frag.setup(this,getSupportFragmentManager(),R.id.fl); //去掉导航栏间的分割线 tab_frag.getTabWidget().setDividerDrawable(null); for (int i = 0; i < tabs.length; i++) { TabHost.TabSpec tabSpec = tab_frag.newTabSpec(tabs[i]); tabSpec.setIndicator(getView(i)); tab_frag.addTab(tabSpec,classes[i],null); } } //返回tab中item的布局的inflated public View getView(int i) { View inflate = View.inflate(this,R.layout.tab_item, null); ImageView view = inflate.findViewById(R.id.tab_imageview); view.setBackgroundResource(R.drawable.timg); TextView tv = inflate.findViewById(R.id.tab_textview); tv.setText(tabs[i]); return inflate; }
ViewPager+FragmentTabHost
1.布局,在页面的下方放置tab <android.support.v4.app.FragmentTabHost android:id="@+id/tab_host" android:layout_width="match_parent" android:layout_height="100dp"> </android.support.v4.app.FragmentTabHost>代码中:tab_host = (FragmentTabHost) findViewById(R.id.tab_host);2.将tab和viewpager绑定tab_host.setup(this,getSupportFragmentManager(),R.id.vp); //vp的监听实现 tab_host.setOnTabChangedListener(this); @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { tab_host.setCurrentTab(position); } @Override public void onPageScrollStateChanged(int state) { } //tab的变化监听 @Override public void onTabChanged(String tabId) { //修改选中的tab的position int position = tab_host.getCurrentTab(); vp.setCurrentItem(position); }3.为tab填充内容 for (int i = 0; i < mFragments.size(); i++) { //设置文字提示 TabHost.TabSpec tabSpec = tab_host.newTabSpec("??"); //设置图片view,该view中的imageview的src不能为selector,否则报错原因名不明 tabSpec.setIndicator(getTab(i)); //绑定fragment,记得要调用三个参数的addTab() tab_host.addTab(tabSpec,mFragments.get(i).getClass(),null); }//tab_host.setOnTabChangedListener(this); @Override public void onTabChanged(String tabId) { //获取当前点击的tab的id int position = tab_host.getCurrentTab(); vp.setCurrentItem(position); }
FragmentTabHost自定义导航栏布局
阅读全文
0 0
- ViewPager+FragmentTabHost
- ViewPager+FragmentTabhost 解决办法
- FragmentTabHost结合ViewPager使用
- ViewPager和FragmentTabHost的使用
- FragmentTabHost+ViewPager可滑动菜单栏
- 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套
- 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套
- Android FragmentTabHost嵌套(ViewPager+Fragment)问题
- FragmentTabHost+viewPager实现底部导航栏
- FragmentTabhost+fragment+viewpager+FragmentActivity的使用
- ViewPager跟FragmentTabHost结合起来使用
- 用Fragment+FragmentTabHost++ViewPager 实现底部菜单栏
- FragmentTabHost+Fragment+ViewPager实现内外层嵌套
- 使用FragmentTabHost+Fragment+viewpager 实现滑动分页
- FragmentTabHost+ViewPager+Fragment实现底部Tab导航
- android主页框架FragmentTabHost+ViewPager,左右滑动
- JavaScript学习总结(十三)——极简主义法编写JavaScript类
- java中jar包详细说明
- Typescript学习笔记(三)——数据类型
- Http报头Accept与Content-Type的区别
- pycharm快捷键
- ViewPager+FragmentTabHost
- RecycleView就一定比listView好用吗?(listView篇)
- driveManager 到datasource 数据源连接的过程演变
- SpringBoot 使用slf4j(logback)入门
- 百度鹰眼Java接口调用增删改查实例
- 接口回调
- magento 模型及程序架构与流程
- 刷题训练——PAT (Basic Level)-1021
- Linux 下常用软件安装