ViewPager類提供了多界面切換的新效果。新效果有如下特征:
[1] 當前顯示一組界面中的其中一個界面。
[2] 當用戶通過左右滑動界面時,當前的屏幕顯示當前界面和下一個界面的一部分。
[3]滑動結束后,界面自動跳轉到當前選擇的界面中。
引用ViewPager控件
ViewPager來源于google 的補充組件android-support-v13.jar,位置在androidSDK文件夾android-sdk-windows\extras\android\compatibility\v13 下將android-support-v13.jar 引用到項目中
下面我們用功能代碼來實現效果:
@ MainActivity.java
package cn.com.farsight;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.media.Image;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class MainActivity extends Activity {
/* 先說明一下實現ViewPager的兩種形式。
* 第一種導入第三方jar包,包的名字是android-support-v4.jar
* 第二種就是應用功能性代碼直接實現,在開發當中這種方法已經不用了
*
* android-support-v4.jar在 android3.0 以后出現的。
*
* 我們只要用到adapter就要想到三個步驟:
* 1.初始化控件;
* 2.初始化數據源;
* 3.初始化適配器,往適配器里填充數據。
*
* 首先在布局文件中。
* 這里我們運用第三方的jar包,沒有提示功能,所以同學們要記住這屆jar包,在開發當中我們經常使用。
*
首先,如果繼承pageradapter,至少必須重寫下面的四個方法
1. instantiateItem(ViewGroup, int)
2. destroyItem(ViewGroup, int, Object)
3. getCount()
4. isViewFromObject(View, Object)
*
*/
private List
private ViewPager mViewPager;
private TestAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//new Thread()
//初始化控件
mViewPager = (ViewPager) findViewById(R.id.pager);
//初始化數據源,把數據添加到list集合中,
list = new ArrayList
ImageView iv1 = new ImageView(this);
iv1.setImageResource(R.drawable.huonv);
list.add(iv1);
ImageView iv2 = new ImageView(this);
iv2.setImageResource(R.drawable.shuiren);
list.add(iv2);
ImageView iv3 = new ImageView(this);
iv3.setImageResource(R.drawable.xuemo);
list.add(iv3);
/初始化適配器
adapter = new TestAdapter();
//連接數據與適配器,把數據顯示到adapter上
mViewPager.setAdapter(adapter);
}
private class TestAdapter extends PagerAdapter{
//計算頁卡數量
// 獲取要滑動的控件的數量,在這里我們以滑動的頁卡為例,那么這里就應該是展示的頁卡圖片的ImageView數量
@Override
public int getCount() {//這個方法,是獲取當前窗體界面數
// TODO Auto-generated method stub
return list.size();//返回頁卡的數量
}
//而isViewFromObject方法是用來判斷pager的一個view是否和instantiateItem方法返回的object有關聯
/* ViewPager源碼,你去看下addNewItem方法,會找到instantiateItem的使用方法,注意這里的mItems變量。
* 然后你再搜索下isViewFromObject,會發現其被infoForChild方法調用,返回值是ItemInfo。再去看下ItemInfo的結構,
* 其中有一個object對象,該值就是instantiateItem返回的。
*
*
* 也就是說,ViewPager里面用了一個mItems(ArrayList)來存儲每個page的信息(ItemInfo),
* 當界面要展示或者發生變化時,需要依據page的當前信息來調整,但此時只能通過view來查找,
* 所以只能遍歷mItems通過比較view和object來找到對應的ItemInfo。
*
*/
// 來判斷顯示的是否是同一張圖片,這里我們將兩個參數相比較返回即可
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
// PagerAdapter只緩存三張要顯示的圖片,如果滑動的圖片超出了緩存的范圍,就會調用這個方法,將圖片銷毀
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
container.removeView(list.get(position));
}
//這個方法,return一個對象,這個對象表明了PagerAdapter適配器選擇哪個對象*放在當前的ViewPager中
//這個方法用來實例化頁卡
// 用這個方法當要顯示的圖片可以進行緩存的時候,會調進行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然后作為返回值返回即可
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));//添加頁卡
return list.get(position);
}
}
}
布局文件
@activity_main.xml
xmlns:tools="//schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
這樣我們的ViewPager就介紹完了。希望你們能夠喜歡。