使用ViewPager实现三个fragment切换
新建一个android项目
先展示效果吧
首先看myfragmentPagerAdater这个类的代码
package com.example.viewpager; import java.util.List; import android.support.v4.app.Fragment; //注意打包是用support.v4的
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
//继承
public class myFragmentPagerAdapter extends FragmentPagerAdapter { private FragmentManager fragmetnmanager; //创建FragmentManager
private List<Fragment> listfragment; //创建一个List<Fragment>
//定义构造带两个参数
public myFragmentPagerAdapter(FragmentManager fm,List<Fragment> list) {
super(fm);
this.fragmetnmanager=fm;
this.listfragment=list;
} @Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return listfragment.get(arg0); //返回第几个fragment
} @Override
public int getCount() {
// TODO Auto-generated method stub
return listfragment.size(); //总共有多少个fragment
} }
然后到MainActivity初始化ViewPager (这里还没有图片偏移和链接点击事件的代码 后面讲到)
/*
* 初始化Viewpager
*
*/
viewpager=(ViewPager) findViewById(R.id.vp); //获取ViewPager
listfragment=new ArrayList<Fragment>(); //new一个List<Fragment>
Fragment f1 = new fragment01();
Fragment f2 = new fragment02();
Fragment f3 = new fragment03();
//添加三个fragment到集合
listfragment.add(f1);
listfragment.add(f2);
listfragment.add(f3); FragmentManager fm=getSupportFragmentManager();
myFragmentPagerAdapter mfpa=new myFragmentPagerAdapter(fm, listfragment); //new myFragmentPagerAdater记得带上两个参数 viewpager.setAdapter(mfpa);
viewpager.setCurrentItem(0); //设置当前页是第一页
现在到MainActivity中的三个链接的点击代码(这三个是TextView来着)之后就可以点击实现页面调转,但是图片偏移还没实现
/*
* 初始化链接
*/
t1=(TextView) findViewById(R.id.textView1);
t2=(TextView) findViewById(R.id.textView2);
t3=(TextView) findViewById(R.id.textView3); t1.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
viewpager.setCurrentItem(0); }
}); t2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { viewpager.setCurrentItem(1);
}
});
t3.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { viewpager.setCurrentItem(2);
}
});
然后是图片偏移
private int index; //当前页卡;
private int imgleth; //图片宽度
private int offset; //偏移量
/*
* 初始化图片
*/
iv=(ImageView) findViewById(R.id.imageView1);
//获取图片宽度
imgleth=BitmapFactory.decodeResource(getResources(), R.drawable.a1).getWidth();
//获取屏幕宽度
DisplayMetrics dm=new DisplayMetrics();
// 把屏幕尺寸信息赋值给DisplayMetrics dm,注意不是set
getWindowManager().getDefaultDisplay().getMetrics(dm);
// 屏幕宽度
int count=dm.widthPixels;
//计算偏移量
offset=(count/3-imgleth)/2; //平移动画(第一页的)
Animation an=new TranslateAnimation(0, offset, 0, 0);
an.setFillAfter(true);
an.setDuration(200);
iv.setAnimation(an);
最后是偏移图片跟着页面走 只需要在之前的 viewpager.setCurrentItem(0);后面添加即可
viewpager.setOnPageChangeListener(new OnPageChangeListener() { int one=offset*2+imgleth;//相邻页面的偏移量
@Override
public void onPageSelected(int arg0) { //评议动画
Animation anima=new TranslateAnimation(index*one+offset,arg0*one+offset,0,0);
index=arg0; //当前页跟着变
anima.setFillAfter(true); // 动画终止时停留在最后一帧,不然会回到没有执行前的状态
anima.setDuration(200);// 动画持续时间0.2秒
iv.startAnimation(anima);// 是用ImageView来显示动画的
Toast.makeText(MainActivity.this, "您选择了第"+(index+1)+"个页卡", 100).show();
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
});
特别注意打包时候是打v4包(每个fragment也是打v4包)
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
TranslateAnimation参数说明:
float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;
float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;
float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;
float toYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;
这4个参数确定移动的起点和终点
使用ViewPager实现三个fragment切换的更多相关文章
- ViewPager+RadioGroup实现标题栏切换,Fragment切换
1.说明: 在使用RadioGroup做标题栏切换的时候,跟ViewPager的滑动有冲突,最后查看了源码+断点调试解决了一些碰到的问题,写一篇博客总结一下,有同样需求的朋友可以借鉴一下,自己以后有用 ...
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...
- ViewPager -- Fragment 切换卡顿 性能优化
当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即 Fragment需要加载UI内容,而又频繁地切换Fragment, ...
- 模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。
需要用到的lib包 :解析json gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等 下载地址:点击下载 Xlistview 下拉上拉第三 ...
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...
- fragment切换刷新 及下拉刷新
此工程较BaiduLocationXMLFragmentDB相比:1.滑动fragment自动刷新该fragment2.下拉刷新fragment,上拉暂未实现 a.fragment切换刷新 1 . 由 ...
- 两层Fragment嵌套,外层Fragment切换时内层Fragment不显示内容
尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/46847269 需求 在搭界面有这么样一个需求:须要两层的Frag ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 实现Fragment 切换时不重新实例化
以前实现Fragment的切换都是用replace方法实现 public void startFragmentAdd(Fragment fragment) { FragmentManager frag ...
随机推荐
- 三角网格(Triangle Mesh)的理解
最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑.车辆.人体,当然还有茶壶等.图14.1 ...
- ubuntu 14.04安装amd omega 驱动
驱动共分4部分: fglrx_14.501-0ubuntu1_amd64_UB_14.01.deb 52.0MB fglrx-core_14.501-0ubuntu1_amd64_UB_14 ...
- Java学习----有风险的代码(异常)
Exception继承了Throwable,但是它本身是有异常类的父类. RuntimeException:运行时异常 Exception->RuntimeException->NullP ...
- css 文本两端对齐
在做表单时我们经常遇到让上下两个字段对齐的情况,比如姓名, 手机号码, 出生地.这样我们就要用到 text-align, text-justify样式了. text-align直接设为justify就 ...
- JavaScript 高阶函数 + generator生成器
map/reduce map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x ...
- PHP实现简易的模板引擎
PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
- 工程经济学economics of project summarize
什么是财务杠杆效应 财务杠杆效应是指由于固定费用的存在而导致的,当某一财务变量以较小幅度变动时.另一相关变量会以较大幅度变动的现象.也就是指在企业运用负债筹资方式(如银行借款.发行债券)时所产生的普通 ...
- MySQL驱动阅读------Connection连接的建立,基于JDBC-----5.1.26
一般获取数据库连接的程序 Class.forName("com.mysql.jdbc.Driver"); final Connection connection = (Connec ...
- Java实现http服务器(一)
基于Java实现Http服务器有多种多样的方法 一种轻量级的方式是使用JDK内置的com.sun.net.httpserver包下和sun.net.httpserver包下类提供的方法构建,该方法轻便 ...