Android ViewPager控制項

2021-08-29 03:59:59 字數 4363 閱讀 8338

viewpager可以實現多個介面的左右滑動。

布局檔案

android:id

="@+id/view_pager"

android:layout_width

="match_parent"

android:layout_height

="match_parent"

/>

介面卡,需要繼承pageradapter

public

static

class

demopageadapter

extends

pageradapter

}// 返回介面數量

@override

public

intgetcount()

@override

public

boolean

isviewfromobject

(view view, object object)

// 新增介面,一般會新增當前頁和左右兩邊的頁面

@override

public object instantiateitem

(viewgroup container,

int position)

// 去除頁面

@override

public

void

destroyitem

(viewgroup container,

int position, object object)

}

設定介面卡

viewpager viewpager =

findviewbyid

(r.id.view_pager)

;viewpager.

setadapter

(new

demopageadapter

(this))

;

效果如下

onpagechangelistener有三個方法

如何實現迴圈的viewpager,我們需要在邊界的時候做一些特殊處理。

在第乙個頁面之前和最後乙個頁面之後,分別新增乙個介面,這樣才能實現迴圈。

public

static

class

cyclepageadapter

extends

pageradapter

}// 返回介面數量+2

@override

public

intgetcount()

@override

public

boolean

isviewfromobject

(view view, object object)

@override

public object instantiateitem

(viewgroup container,

int position)

else

if(position == mviewlist.

size()

+1)else

// 頁面如果重複新增,會發生異常

trycatch

(exception e)

return view;

}@override

public

void

destroyitem

(viewgroup container,

int position, object object)

}

到達實際邊界以後,切換當前頁。

final viewpager viewpager =

findviewbyid

(r.id.view_pager)

;final pageradapter adapter =

newcyclepageadapter

(this);

viewpager.

setadapter

(adapter)

;viewpager.

addonpagechangelistener

(new

viewpager.onpagechangelistener()

@override

public

void

onpageselected

(int position)

@override

public

void

onpagescrollstatechanged

(int state)

else

if(position == adapter.

getcount()

-1)}

}});

// 初始頁為1

viewpager.

setcurrentitem(1

);

效果如下

自定義切換動畫需繼承pagetransformer,並覆蓋transformpage(view page, float position)方法,實現不一樣的動畫,

手勢從左往右滑動,當前頁面position為0->1,而前一頁面position從-1->0。

定義乙個動畫,前一頁面左右移動,而後一頁面位置不變但伸縮顯示。

private

class

demopagetransformer

implements

viewpager.pagetransformer

else

if(position <=0)

else

if(position <1)

else

}}

效果如下

廣告頁長被用於首頁,可以自己切換,也可以手動切換。

使用viewpager實現廣告頁,主要是要判斷是否在手動切換,可以新增onpagechangelistener來判斷。

mviewpager.

addonpagechangelistener

(new

viewpager.onpagechangelistener()

@override

public

void

onpageselected

(int position)

@override

public

void

onpagescrollstatechanged

(int state)

else

if(state == viewpager.scroll_state_dragging)}}

);mhandler.

sendemptymessagedelayed

(move_to_next,

3000

);

handler類處理自動切換事件

private

static

final

int move_to_next =1;

private handler mhandler =

newhandler()

mviewpager.

setcurrentitem

(item)

; mhandler.

sendemptymessagedelayed

(move_to_next,

3000);

}}};

可以利用clipchildren屬性實現畫廊效果。詳見android clipchildren屬性

android viewpager禁止左右滑動

看到禁止滑動的需求 立馬想到的就是攔截事件 其次重寫viewpager 攔截事件 一是事件ontouchevent 二是 onintercepttouchevent 使兩者都返回false 達到攔截不響應滑動操作的目的 簡潔 主要傳遞的是一種程式設計思想 public class noscrollv...

Android ViewPager動態載入資料

這個近兩年前寫的部落格,邏輯混亂,沒有完整介紹,我現在自己都不忍直視,建議去這個部落格看 這裡介紹比清晰。當對viewpager有個大致了解過後看下面 就能看懂些了,當然下面的 可以完全不看,建議直接看 訪問密碼 93f7 只有看原始碼才最有效果。其實可以把viewpager當做乙個listview...

Android ViewPager使用技巧

1 viewpage原始碼路徑 android.support.v4.view.viewpager,需要匯入android support v4.jar包 2 viewpage繼承自viewgroup public class viewpager extends viewgroup 注 androi...