ViewPager与Fragment实现页面滑动效果:
首先继承FragmentActivity,
为ViewPager提供展示所需的Fragment和FragmentPagerAdapter:
Fragment来指定页面的布局以及功能
// fragment private class MyFragment extends Fragment { private String text; private int color; public MyFragment(String text, int color) { this.text = text; this.color = color; } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView tv = new TextView(MainActivity.this); tv.setBackgroundColor(color); tv.setText(text); return tv; } }
adapter指定该Viewpager有多少页面以及那个位置需要显示哪个页面:
// adapter private class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return pages.size(); } @Override public Fragment getItem(int arg0) { return pages.get(arg0); } }
设置OnPageChangeListener,指定页面改变时需要做什么其他操作:
@Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams(); lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth); tabline.setLayoutParams(lp); } @Override public void onPageSelected(int arg0) { // set titles for (int i = 0; i < titles.size(); i++) { if (arg0 == i) { titles.get(i).setSelected(true); } else { titles.get(i).setSelected(false); } } }
完整的代码:
package com.hzy.myviewpager; import java.util.ArrayList; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.LinearLayout; import android.widget.TextView; import com.hzy.myviewpager.R.id; public class MainActivity extends FragmentActivity implements OnPageChangeListener, OnClickListener { ViewPager pager = null; View tabline = null; private int mTabLineWidth; // titles TextView title1 = null; TextView title2 = null; TextView title3 = null; ArrayList<TextView> titles = null; ArrayList<Fragment> pages = null; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); initView(); initTabline(); } private void initView() { setContentView(R.layout.activity_main); pages = new ArrayList<Fragment>(); titles = new ArrayList<TextView>(); pager = (ViewPager) findViewById(id.main_viewpager); title1 = (TextView) findViewById(id.main_tab1); title2 = (TextView) findViewById(id.main_tab2); title3 = (TextView) findViewById(id.main_tab3); title1.setOnClickListener(this); title2.setOnClickListener(this); title3.setOnClickListener(this); titles.add(title1); titles.add(title2); titles.add(title3); // create new fragments pages.add(new MyFragment("tab1", Color.BLUE)); pages.add(new MyFragment("tab2", Color.RED)); pages.add(new MyFragment("tab3", Color.CYAN)); // set adapter pager.setAdapter(new MyAdapter(getSupportFragmentManager())); pager.setOnPageChangeListener(this); pager.setCurrentItem(0); titles.get(0).setSelected(true); } // tablines private void initTabline() { tabline = findViewById(id.main_tab_line); Display display = getWindow().getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); mTabLineWidth = outMetrics.widthPixels / 3; LayoutParams lp = tabline.getLayoutParams(); lp.width = mTabLineWidth; tabline.setLayoutParams(lp); } @Override public void onClick(View v) { switch (v.getId()) { case id.main_tab1: pager.setCurrentItem(0, true); break; case id.main_tab2: pager.setCurrentItem(1, true); break; case id.main_tab3: pager.setCurrentItem(2, true); break; default: break; } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) tabline.getLayoutParams(); lp.leftMargin = (int) ((arg0 + arg1) * mTabLineWidth); tabline.setLayoutParams(lp); } @Override public void onPageSelected(int arg0) { // set titles for (int i = 0; i < titles.size(); i++) { if (arg0 == i) { titles.get(i).setSelected(true); } else { titles.get(i).setSelected(false); } } } // fragment private class MyFragment extends Fragment { private String text; private int color; public MyFragment(String text, int color) { this.text = text; this.color = color; } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView tv = new TextView(MainActivity.this); tv.setBackgroundColor(color); tv.setText(text); return tv; } } // adapter private class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return pages.size(); } @Override public Fragment getItem(int arg0) { return pages.get(arg0); } } }
代码中通过实现OnPageChangeListener接口手动设置了页面指示条的位置
相关推荐
Viewpager通俗一点讲就是一个允许左右翻转带数据的页面的布局管理器,经常用来连接Fragment,它很方便管理每个页面的生命周期,使用ViewPager管理Fragment是标准的适配器实现。最常用的实现一般有...
可能有人会说 ViewPager 有 viewPager.setOffscreenPageLimit() 的方法,我们传个 0 进去不就好了吗?看过源码的应该知道,即便你传了 0 进去,系统也会默认为 1 的,也就是 ViewPager 依然会加载当前页面的前后各一...
滑动冲突可以说是日常开发中比较常见的一类问题,也是比较让人头疼的一类问题,尤其是在使用第三方框架的时候,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。 关于滑动冲突 滑动冲突分类: 滑动...
Android应用源码之ViewPager+Fragment侧滑选项卡,浏览器控件,两次退出.zip项目安卓应用源码下载Android应用源码之ViewPager+Fragment侧滑选项卡,浏览器控件,两次退出.zip项目安卓应用源码下载 1.适合学生毕业...
使用方法 注意:该轮子适用于androidx中的ViewPager2和ViewPager 注意:如果轮子死活下载不下来,说明maven地址有毛病,你需要找到jitpack的官网首页,查看最新的官网地址 注意:记得去gayhub查看最新版本,最新版本...
ViewPager是android的support库中的一个控件,也是一个在许多应用开发中都用得比较多的控件。目前为止,对ViewPager的使用,我一般是用ViewPager + Fragment的组合,偶尔也有ViewPager加View的组合。关于ViewPager +...
在Android应用中,ViewPager是我们不可避免使用的一个控件,因为它可以使我们在占用较少空间的同时,增强内容的丰富性,同时以其内部流淌着Google的血液,所以它几乎成了每一个App的标配控件。但是,假如ViewPager的...
本人在学习基础控件的时候写的,运行环境是在Android 4.2。 包含Fragment和viewPager和HorizontalScrollView,actionBar等比较新的控件的使用方法
Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提供了更加规范的MD设计风格的控件。...
ViewPager和Fragment结合使用,Fragment出现被预计载的情况 解决方案 项目中使用的主要技术及框架 框架 ButterKnife 注解绑定获取控件功能 Picasso 网络和本地图片的加载功能 okhttp 网络连接功能
现在Android内部提供了现成的TabLayout控件来实现ViewPager指示器的效果。 先看效果图: 导入依赖 在Gradle文件中导入依赖,代码如下: compile 'com.android.support:design:23.4.0' TabLayout类就在这个依赖包中...
考虑这样一种场景,开发中我们经常使用ViewPager和Fragment配合使用所组成的页面滑动效果,很多主流的应用都会使用这样的效果。在这种效果中,可以使用左右滑动来切换界面,而每一个界面里面往往又都是ListView这样...
现在三个Fragment已经添加到了MainActivity中,滑动ViewPager切换Fragment,同时底部的导航栏也会切换,在为ViewPager添加监听以前,先说说底部导航栏。 第二步,底部导航。 这个的切换其实就是切换准备好的png...
滑动冲突可以说是日常开发中比较常见的一类问题,也是比较让人头疼的一类问题,尤其是在使用第三方框架的时候,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。 关于滑动冲突 滑动冲突分类 滑动...
PagerAdapter简介 ...PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件,可以实现控件的滑动效果,比如咱们在软件中常见的广告栏的滑动效果,用vi
使用ViewPager,PagerSlidingTabStrip,SwipeRefreshLayout打造一款可以点击可以侧滑的顶部导航栏。...2.把PagerSlidingTabStrip这个控件添加到你的布局中,它通常会放在ViewPager的上面 <com.astuetz.PagerS
本文实例讲述了Android TabLayout(选项卡布局)简单用法。分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合。达到很漂亮的效果。但是TabPageIndicator是第三方的...
Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来...使用方法很简单,只需要添加一句依赖 compile ‘com.android.support:design:24.0.0’ 先用TabLayout和SnackBar以及N
顶层使用LoopView,该控件继承ViewGroup,是一个可以无限轮播的ViewPager第二层使用Trina的AutoScrollViewPager,作为启动器.第三层AutoLoopViewPager,用于功能增强,现在提供了自定义属性scale,用于设置宽高比ViewPager...