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

先看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. 张兴盼-201871010131《面向对象程序设计(Java)》第七周学习总结

    张兴盼-201871010131<面向对象程序设计(Java)>第七周学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个 ...

  2. centos用手机号无法登入安全狗的解决方法

    前面我们安装好了安全狗,需要加服务器加入服云中,通常用sdcloud –u 用户名就可以,但如果是手机号的话就可能无法登陆,我们用sdcloud -h命令查看帮助,如下图所示 我们看到输入账号可以用- ...

  3. [1018NOIP模拟赛]

    题目描述 Description 精灵王国要同侵略 $ Bzeroth $ 大陆的地灾军团作战了. 众所周知,精灵王国有 \(N\) 座美丽的城市,它们以一个环形排列在$ Bzeroth$ 的大陆上. ...

  4. <Graph> 133 399 223

    133. Clone Graph 我们也可以使用 BFS 来遍历图,使用队列 queue 进行辅助,还是需要一个 HashMap 来建立原图结点和克隆结点之间的映射.先克隆当前结点,然后建立映射,并加 ...

  5. Newcoder 小白月赛20 H 好点

    Newcoder 小白月赛20 H 好点 自我感觉不错然后就拿出来了. 读读题之后我们会发现这是让我们求一堆数,然后这些数一定是递减的. 就像这样我们选的就是框起来的,然后我们可以看出来这一定是一个单 ...

  6. 【转】java 泛型详解

    java 泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. java泛型详解 ...

  7. [LeetCode] 269. Alien Dictionary 另类字典

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  8. [LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  9. sonatype nexus安装教程

    1. 安装nexus前需要先安装maven.(详见jdk安装教程)2. 将nexus-2.0.2.rar放到d:\teamwork中,点击右键,解压到当前文件夹中.其中包含两个文件夹:nexus,so ...

  10. oracle--10安装问题

    01,ins_ctx.mk INFO: make: *** [ctxhx] Error INFO: End output from spawned process. INFO: ----------- ...