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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM