新建一個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個參數確定移動的起點和終點
