时间:2021-05-19
现在很多app一打开就是一个ViewPager,然后可以用手指滑,每滑一次就换一张图,底下还会有圈圈表示说现在滑到第几章~
通常这些图片都是放功能简介或是使用教学之类的,我的需求很简单,就是上面提到的那样而已。
有两种做法,一种是找现有套件,查了一堆资料每个都跟我推荐ViewPagerIndicator这套,我之前也看过这套,只是看起来需要有fragment再加上google play范例好像载不到了,所以只好自己实做一个。
Viewpager的实作可参考Android ViewPager使用详解里面的程序码:
这样子你就有一个ViewPager了
下面我们来具体看一下ViewPager的用法:
一、ViewPager创建步骤
① 在XML布局中加入android.support.v4.view.ViewPager
② 加载显示的页卡将Layout布局转换为View对象
(1)
LayoutInflater lf getLayoutInflater().from(this); lf.inflate(resource,root);(2)
View.inflate(context,resource,root);③ 配置Adapter(三种Adapter)
(1)PagerAdapter 数据源:List<View>
(2)FragmentPagerAdapter 数据源:List<Fragment>
(3)FragmentStatePagerAdapter 数据源:List<Fragment>
二、代码示例
新建四个Fragment和他们的布局下面是MainActivity的xml布局:
第一种PagerAdapter
public class MyPagerAdapter extends PagerAdapter { private List<View> viewList; private List<String> titleList; public MyPagerAdapter(List<View> viewList,List<String> titleList){ this.viewList = viewList; this.titleList = titleList; } /** * 返回页卡的数量 */ @Override public int getCount() { return viewList.size(); } /** * view是否来自对象 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } /** * 实例化一个页卡 */ @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position); } /** * 销毁一个页卡 */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position)); } /** * 设置ViewPager的标题 */ @Override public CharSequence getPageTitle(int position) { return titleList.get(position); }}第二种FragmentPagerAdapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragList; private List<String> titleList; public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragList,List<String> titleList) { super(fm); this.fragList = fragList; this.titleList = titleList; } @Override public Fragment getItem(int arg0) { return fragList.get(arg0); } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } @Override public int getCount() { return fragList.size(); }}第三种FragmentStatePagerAdapter(该适配器可以动态销毁Fragment)
public class MyFragmentPagerAdapter2 extends FragmentStatePagerAdapter {//该适配器可以动态销毁 private List<Fragment> fragList; private List<String> titleList; public MyFragmentPagerAdapter2(FragmentManager fm,List<Fragment> fragList,List<String> titleList) { super(fm); this.fragList = fragList; this.titleList = titleList; } @Override public Fragment getItem(int arg0) { return fragList.get(arg0); } @Override public CharSequence getPageTitle(int position) { return titleList.get(position); } @Override public int getCount() { return fragList.size(); } @Override public Object instantiateItem(ViewGroup arg0, int arg1) { return super.instantiateItem(arg0, arg1); } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); }}MainActivity里使用getSupportFragmentManager()该Activity必须继承FragmentActivity:
public class MainActivity extends FragmentActivity implements OnPageChangeListener{ private List<View> viewList; private List<String> titleList; private ViewPager pager; private PagerTabStrip tab;//顶部标题 private List<Fragment> fragList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewList = new ArrayList<View>(); titleList = new ArrayList<String>(); tab = (PagerTabStrip) findViewById(R.id.tab); View view1 = View.inflate(this,R.layout.view1,null); View view2 = View.inflate(this,R.layout.view2,null); View view3 = View.inflate(this,R.layout.view3,null); View view4 = View.inflate(this,R.layout.view4,null); viewList.add(view1); viewList.add(view2); viewList.add(view3); viewList.add(view4); fragList = new ArrayList<Fragment>(); fragList.add(new Fragment1()); fragList.add(new Fragment2()); fragList.add(new Fragment3()); fragList.add(new Fragment4()); //为ViewPager页卡设置标题 titleList.add("第一页"); titleList.add("第二页"); titleList.add("第三页"); titleList.add("第四页"); //为PagerTabStrip设置一些属性 tab.setBackgroundColor(Color.WHITE); tab.setDrawFullUnderline(false); tab.setTabIndicatorColor(Color.BLUE); pager = (ViewPager) findViewById(R.id.pager); //MyPagerAdapter adapter = new MyPagerAdapter(viewList,titleList); //MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragList, titleList); /** * 使用getSupportFragmentManager()该Activity必须继承FragmentActivity */ MyFragmentPagerAdapter2 adapter = new MyFragmentPagerAdapter2(getSupportFragmentManager(), fragList, titleList); pager.setAdapter(adapter); pager.setOnPageChangeListener(this); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { Toast.makeText(this,"当前是第"+(arg0+1)+"个界面", 0).show(); }}声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在项目中用到了Android的ViewPager组件,但是发现在滑动的时候不是特别流畅,有些小的滑动无法响应,于是考虑进行优化。ViewPager手指滑动切换时
ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可
ViewPager是android-support-v4.jar包里的组件。在布局文件里标签需要连包名一起写全称基本用法ViewPager的基本用法我概括为三步
Android中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法问题描述:开发中发现,SwipeRefreshLayout的下拉刷新
本文实例讲述了Android编程简易实现XML解析的方法。分享给大家供大家参考,具体如下:首先创建在Android工程中创建一个Assets文件夹app/src