先上图,手指在手机向左或者向右滑就可以实现相应的页面切换。

先看activity_main.xml文件,非常简单,主要是三个标题TextView和viewpager

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:orientation="vertical"
android:paddingTop="2dp"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="5dp"
android:orientation="horizontal"
android:paddingLeft="20dp"
android:paddingRight="20dp"> <TextView
android:id="@+id/tv_layout_one"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:gravity="center"
android:text="one" /> <TextView
android:id="@+id/tv_layout_two"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:gravity="center"
android:text="two" /> <TextView
android:id="@+id/tv_layout_three"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="0.5"
android:gravity="center"
android:text="three" />
</LinearLayout> <android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_marginTop="5dp"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>

我们再看看相应的MainActivity需要准备些什么

 package com.example.keranbin.view.activity;

 import android.app.Activity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; import com.example.keranbin.view.R;
import com.example.keranbin.view.adapter.MFragmentPagerAdapter;
import com.example.keranbin.view.fragment.OneFragment;
import com.example.keranbin.view.fragment.ThreeFragment;
import com.example.keranbin.view.fragment.TwoFragment; import java.util.ArrayList; public class MainActivity extends FragmentActivity {
private ViewPager viewPager; //页面viewpager
private ArrayList<Fragment> fragmentlists; //fragment集合,
private MFragmentPagerAdapter mFragmentPagerAdapter; //viewpager适配器
private TextView tvOne;
private TextView tvTwo;
private TextView tvThree; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(); //初始化页面组件及一些数据
setListener(); //对页面一些组件设置一些监听事件 } //初始化页面组件及一些数据
private void initView() {
viewPager= (ViewPager) this.findViewById(R.id.vp);
tvOne= (TextView) this.findViewById(R.id.tv_layout_one);
tvTwo= (TextView) this.findViewById(R.id.tv_layout_two);
tvThree= (TextView) this.findViewById(R.id.tv_layout_three); //初始化one two three的背景
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_blue_left);
tvTwo.setBackgroundResource(R.drawable.solid_transparent_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_transparent_right); //往fragment集合里添加fragment
fragmentlists=new ArrayList<Fragment>();
OneFragment oneFragment=new OneFragment();
TwoFragment twoFragment=new TwoFragment();
ThreeFragment threeFragment=new ThreeFragment();
fragmentlists.add(oneFragment);
fragmentlists.add(twoFragment);
fragmentlists.add(threeFragment); //初始化viewpager适配器
initViewPagerAdapter(); } //初始化viewpager适配器
private void initViewPagerAdapter() {
mFragmentPagerAdapter=new MFragmentPagerAdapter(getSupportFragmentManager(),fragmentlists);
viewPager.setAdapter(mFragmentPagerAdapter);
viewPager.setCurrentItem(0);
} //对页面一些组件设置一些监听事件
private void setListener() {
//分别对one,two,three三个TextView设置点击监听事件,发生点击事件时改变相应的背景及viewpager的内容
tvOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_blue_left);
tvTwo.setBackgroundResource(R.drawable.solid_transparent_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_transparent_right);
viewPager.setCurrentItem(0);
}
}); tvTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_transparent_left);
tvTwo.setBackgroundResource(R.drawable.solid_blue_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_transparent_right);
viewPager.setCurrentItem(1);
}
}); tvThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_transparent_left);
tvTwo.setBackgroundResource(R.drawable.solid_transparent_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_blue_right);
viewPager.setCurrentItem(2);
}
}); //对页面viewpager设置监听事件
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
//页面滑动时改变"one","two","three"三个TextView的背景颜色
if(position==0){
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_blue_left);
tvTwo.setBackgroundResource(R.drawable.solid_transparent_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_transparent_right);
}else if(position==1){
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_transparent_left);
tvTwo.setBackgroundResource(R.drawable.solid_blue_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_transparent_right);
}else if(position==2){
tvOne.setBackgroundResource(R.drawable.solid_half_elipse_transparent_left);
tvTwo.setBackgroundResource(R.drawable.solid_transparent_rectangle);
tvThree.setBackgroundResource(R.drawable.solid_half_elipse_blue_right);
}
} @Override
public void onPageScrollStateChanged(int state) { }
}); } }

大体思路是,我们先定义一个页面集合ArrayList<Fragment>,接着建立相应的Fragment装载到集合中,然后定义自己的viewPager适配器,最后调用viewpager的setAdapter即可。

自定义的viewpager适配器代码如下

 package com.example.keranbin.view.adapter;

 import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; import java.util.ArrayList; /**
* Created by keranbin on 2015/10/12.
*/
public class MFragmentPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragmentlists; public MFragmentPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragmentlists) {
super(fm);
this.fragmentlists=fragmentlists;
} @Override
public int getCount() {
return fragmentlists.size();
} @Override
public Fragment getItem(int position) {
return fragmentlists.get(position);
}
}

Android viewPager+fragment实现滑页效果的更多相关文章

  1. ViewPager实现滑动翻页效果

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import andr ...

  2. Android ViewPager Fragment使用懒加载提升性能

     Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...

  3. ViewPager、Fragment、Matrix综合使用实现Tab滑页效果

    原文地址:http://www.cnblogs.com/kross/p/3372987.html 我们实现一个上面是一个可以左右滑动的页面,下面是三个可点击切换的tab按钮,tab按钮上还有一个激活条 ...

  4. 使用ViewPager+Fragment实现选项卡切换效果

    实现效果 本实例主要实现用ViewPage和Fragment实现选项卡切换效果,选项卡个数为3个,点击选项卡或滑动屏幕会切换Fragment并实现选项卡下方下边框条跟随移动效果. 本程序用androi ...

  5. Android - ViewPager+Fragment初始化问题

    Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...

  6. android ViewPager+Fragment之懒加载

    说说写这篇博客的背景吧,前两天去面试,问到一个问题说的是:比如我们首页,是有3个fragment构成的,并且要是实现作用可以滑,那么这个最好的选择就是ViewPager+fragment了,但是我们知 ...

  7. Android ViewPager + Fragment的布局

    ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...

  8. Unity实现滑页效果(UGUI)

    简介 项目需要...直接展示效果吧: 原理 使用UGUI提供的ScrollRect和ScrollBar组件实现基本滑动以及自己控制每次移动一页来达到滑页的效果. 实现过程 1.创建两个panel,上面 ...

  9. Android ViewPager+Fragment 在Activity中获取Fragment的控件

    如果ViewPager+Fragment实现Tab切换,在activity中利用adapter.getItem获取到fragment然后再根据fragment.的方法获取控件 //隐藏求租,以下代码用 ...

随机推荐

  1. npm安装使用^符号时,在0.0.1等版本下区别

    文档地址 https://docs.npmjs.com/misc/semver Caret Ranges ^1.2.3 ^0.2.5 ^0.0.4§ Allows changes that do no ...

  2. Azure产品整理

    Azure的文档真是够落地,简明易懂. 计算 Linux 虚拟机:为 Ubuntu.Red Hat 等预配虚拟机 Windows 虚拟机 为 SQL Server.SharePoint 等预配虚拟机 ...

  3. web框架--tornado框架之模板引擎

    使用Tornado实现一个简陋的任务表功能demo来讲解tornado框架模板引擎 一.demo目录结构 二.具体文件内容 2.1.commons.css .body{ margin: 0; back ...

  4. python异步编程

    python用asyncio 模块实现异步编程,该模块最大特点就是,只存在一个线程 由于只有一个线程,就不可能多个任务同时运行.asyncio 是"多任务合作"模式(coopera ...

  5. Python爬虫练习

    例一:爬取信息关于'gbk' codec can't encode character '\xa0' in position 6: illegal 错误提示: #初始化class 得到对象 draw= ...

  6. Spring Cloud Alibaba整合Sentinel流控

    前面我们都是直接通过集成sentinel的依赖,通过编码的方式配置规则等.对于集成到Spring Cloud中阿里已经有了一套开源框架spring-cloud-alibaba,就是用于将一系列的框架成 ...

  7. 2,[VS入门教程] 使用Visual Studio写c语言 入门与技巧精品文~~~~优化篇

    本文导航: 关闭界面特效以提高流畅度 解决调试时出现"无法查找或打开PDB文件"的符号问题 注册微软账号并在vs登录 使用Visual Studio Team Services,同 ...

  8. java8 关于Set集合的线程安全使用

    场景:并发多线程,往Set集合中存放数据时,发现最终的数量结果不对,经过排查,没有使用线程安全的Set导致 哈哈,不会描述,代码解释一切,下面代码,使用的 Sets.newHashSet() 和 Co ...

  9. [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"

    | 导语 6月29日,北京东直门亚朵S酒店,云+社区邀您参加<音视频及融合通信技术>沙龙活动,深度探讨音视频及融合通信技术的发展及实践,领略前沿,共创价值. 数字多媒体技术的不断发展对音视 ...

  10. [转帖]mDNS原理的简单理解

    mDNS原理的简单理解 https://binkery.com/archives/318.html 发现还有avahi-daemon mdns 设置ip地址 等等事项 网络部分 自己学习的还是不够多 ...