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接口手动设置了页面指示条的位置
相关推荐
在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现屏幕间左右滑动切换的机制。这种设计模式可以提供高效的用户体验,使得用户在多个内容之间进行平滑的过渡,常见于应用的引导页、TabLayout或者...
在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其适用于创建带有多个视图的复杂界面。`ViewPager`允许用户通过水平滑动来浏览相邻的`Fragment`,而`Fragment`则用于...
在Android应用开发中,ViewPager和Fragment是两个非常重要的组件,它们常常被结合使用来实现丰富的用户界面和交互体验。ViewPager允许用户左右滑动查看多个页面,而Fragment则为应用程序提供了模块化屏幕区域,使得...
【ViewPager+Fragment_Demo】是一个基于Android开发的项目示例,它展示了如何使用ViewPager和Fragment来构建一个功能完善的Tab导航栏。在Android应用设计中,Tab导航是一种常见的用户界面模式,用于展示多个相关的...
总的来说,这个源码实例展示了如何在Android应用中使用ViewPager和Fragment来创建选项卡式界面,这对Android开发者来说是一项基础且重要的技能。通过学习和理解这个例子,你可以更好地掌握Android应用的界面交互设计...
当ViewPager与Fragment结合使用时,通常我们会创建一个FragmentPagerAdapter或FragmentStatePagerAdapter作为ViewPager的数据适配器。这两个适配器都继承自PagerAdapter,但它们在处理Fragment的生命周期上有所不同...
要使用ViewPager,首先需要在布局XML文件中添加ViewPager控件,然后在Activity或Fragment中设置适配器,如`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,适配器负责为ViewPager提供页面内容。 **2. ...
在Android应用开发中,ViewPager和Fragment是两个非常重要的组件,它们常常被一起使用来构建复杂的用户界面,尤其是对于实现滑动页面切换效果时。本文将深入探讨如何在项目中有效地结合ViewPager与Fragment,以及...
`ViewPager`是Android SDK中的一个控件,它允许用户左右滑动页面来查看多个视图,而`Fragment`则是Android应用中用于构建可动态组合的UI组件。在本`ViewPager + Fragment`小Demo中,我们将深入探讨如何将这两个组件...
通过这个Demo,你不仅学习了如何使用`TabLayout`、`ViewPager`和`Fragment`实现分页滑动,还了解了如何组织和管理Android应用中的UI组件。此外,你还可以进一步扩展这个Demo,例如添加自定义`Tab`图标、动态加载`...
`ViewPager` 与 `Fragment` 结合使用时,通常会借助 `FragmentPagerAdapter` 或 `FragmentStatePagerAdapter` 这两个适配器类。`FragmentPagerAdapter` 适用于页面数量较少并且不会动态改变的情况,它会一次性加载...
在Android应用开发中,"BottomBar+ViewPager+Fragment"是一种常见的设计模式,用于构建具有底部导航栏的应用界面。这种设计可以提供多个主视图之间的平滑切换,为用户带来便捷的交互体验。以下是对这个主题的详细...
【标题】:在Android开发中,ViewPager和Fragment的结合使用是构建动态、可滑动页面的常见技术。这种组合能够创建出类似应用启动时的欢迎页效果,类似于新浪的欢迎界面,提供用户友好的交互体验。 【描述】:...
ViewPager 是 Android 中的一种滑动控件,用于实现多个页面之间的滑动切换,而 Fragment 则是 Android 中的一种组件,用于实现屏幕上的一个独立的界面单元。 要实现无限滑动,我们需要使用 FragmentPagerAdapter 来...
本教程将详细介绍如何在Android项目中集成使用Fragment和Fragment + ViewPager的底部菜单栏。 首先,理解Fragment是Android中的一个关键组件,它代表了界面的一部分,可以在Activity之间复用,提供了模块化设计的...
在Android开发中,`ViewPager`、`Fragment`和`RecyclerView`是三个非常重要的组件,它们在构建复杂的用户界面,特别是涉及到页面滑动和数据展示时,发挥着关键作用。本篇将深入探讨这三个组件的使用及其结合方式。 ...
在Android应用开发中,`ViewPager`是一个非常重要的组件,它允许用户通过左右滑动来浏览多个页面,通常与`Fragment`结合使用以实现更灵活的界面布局和交互。本篇文章将深入探讨`ViewPager`和`Fragment`在开源中国...
本项目"Android ViewPager+Fragment实现QQ界面"就是针对这一功能的一个实践示例,适合计算机科学与技术专业的学生进行毕业设计学习。 首先,ViewPager是Android Support Library中的一个控件,它通过适配器...
在Android应用开发中,Viewpager和Fragment的配合使用已经成为一种常见的设计模式,它使得用户界面更加灵活和互动。本文将详细讲解如何实现标题所描述的功能,包括“viewpager与fragment配合”、“左拉抽屉效果...