Android viewPager+fragment实现滑页效果
先上图,手指在手机向左或者向右滑就可以实现相应的页面切换。
先看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实现滑页效果的更多相关文章
- ViewPager实现滑动翻页效果
实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import andr ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- ViewPager、Fragment、Matrix综合使用实现Tab滑页效果
原文地址:http://www.cnblogs.com/kross/p/3372987.html 我们实现一个上面是一个可以左右滑动的页面,下面是三个可点击切换的tab按钮,tab按钮上还有一个激活条 ...
- 使用ViewPager+Fragment实现选项卡切换效果
实现效果 本实例主要实现用ViewPage和Fragment实现选项卡切换效果,选项卡个数为3个,点击选项卡或滑动屏幕会切换Fragment并实现选项卡下方下边框条跟随移动效果. 本程序用androi ...
- Android - ViewPager+Fragment初始化问题
Android应用开发中,经常会用到ViewPager + Fragment,虽然效果不错,但随之而来的还有一些问题,下面就说说其中的初始化问题. ViewPager初始化时会预加载前后的2个页面,即 ...
- android ViewPager+Fragment之懒加载
说说写这篇博客的背景吧,前两天去面试,问到一个问题说的是:比如我们首页,是有3个fragment构成的,并且要是实现作用可以滑,那么这个最好的选择就是ViewPager+fragment了,但是我们知 ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
- Unity实现滑页效果(UGUI)
简介 项目需要...直接展示效果吧: 原理 使用UGUI提供的ScrollRect和ScrollBar组件实现基本滑动以及自己控制每次移动一页来达到滑页的效果. 实现过程 1.创建两个panel,上面 ...
- Android ViewPager+Fragment 在Activity中获取Fragment的控件
如果ViewPager+Fragment实现Tab切换,在activity中利用adapter.getItem获取到fragment然后再根据fragment.的方法获取控件 //隐藏求租,以下代码用 ...
随机推荐
- springboot+springcloud微服务项目全套资料(笔记+源码+代码)
最近好几天没有写博客了,由于时间的太忙了,项目要做.各种资格证要考试,实在没有时间写了,今天正好赶上有闲暇的一刻,应许多的爱好者的要求发一份微服务项目的资料,此资料十分完整,且是最新的.希望各位读者能 ...
- 用Jetpack的Site Accelerator为网站CDN加速
Jetpack 的Site Accelerator站点加速器(前身为 Photon,注意:“Photon”现在是站点加速器的一部分)允许 Jetpack 优化图像并通过他们的全球服务器网络CDN提供图 ...
- zzTensorflow技术内幕:
性能优势 TensorFlow在大规模分布式系统上的并行效率相当高,如下图所示: 图5:TensorFlow并发效率 在GPU数量小于16时,基本没有性能损耗,在50块的时候,可以获得80%的效率,也 ...
- JDOJ 1946 求最长不下降子序列个数
Description 设有一个整数的序列:b1,b2,…,bn,对于下标i1<i2<…<im,若有bi1≤bi2≤…≤bim 则称存在一个长度为m的不下降序列. 现在有n个数,请你 ...
- leetcode138. 复制带随机指针的链表
思路一:哈希 借助哈希保存节点信息. 代码 时间复杂度:O(n)空间复杂度:O(n) class Solution{ public: Node* copyRandomList(Node* head) ...
- leetcode14最长公共前缀
class Solution { public: string longestCommonPrefix(vector<string>& strs) { ) return " ...
- Redis笔记1-Redis介绍及数据类型使用场景
Redis介绍:C语言开发.单线程操作.高性能.键值对.可持久化的数据库.Redis采用redisObject结构来统一五种数据类型,redisObject是五种类型的父类,可以在函数间传递时隐藏具体 ...
- vue项目中npm安装sass,less,stylus
用vue-cli脚手架搭建出来的,默认是用标准css的.如果你想用sass,less,stylus就需要自己手动安装一下了. 进入项目文件夹,然后安装(这里以stylus为例)stylus和stylu ...
- [LeetCode] 72. Edit Distance 编辑距离
Given two words word1 and word2, find the minimum number of operations required to convert word1 to ...
- [LeetCode] 28. Implement strStr() 实现strStr()函数
Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...