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...