public class ViewPager
extends ViewGroup
java.lang.Object | |||
↳ | android.view.View | ||
↳ | android.view.ViewGroup | ||
↳ | android.support.v4.view.ViewPager |
布局管理器,允许用户在数据页面上左右翻转。 您提供了一个PagerAdapter
的实现来生成该视图显示的页面。
ViewPager通常与Fragment
结合使用,这是一种方便的方式来提供和管理每个页面的生命周期。 在ViewPager中实现了使用片段的标准适配器,它覆盖了最常见的用例。 这些是FragmentPagerAdapter
和FragmentStatePagerAdapter
; 这些类中的每一个都有简单的代码,显示如何与它们建立完整的用户界面。
使用ViewPager.DecorView
批注注释的视图被视为视图页面装饰的一部分。 每个装饰视图的位置可以通过其属性android:layout_gravity
进行控制。 例如:
<android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.PagerTitleStrip android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" /> </android.support.v4.view.ViewPager>
有关如何使用ViewPager的更多信息,请阅读 Creating Swipe Views with Tabs 。
下面是ViewPager的一个更复杂的例子,与ActionBar
标签一起使用它。 您可以在API 4+支持演示和API 13+支持演示示例代码中找到使用ViewPager的其他示例。
public class ActionBarTabsPager extends Activity { ViewPager mViewPager; TabsAdapter mTabsAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewPager = new ViewPager(this); mViewPager.setId(R.id.pager); setContentView(mViewPager); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); mTabsAdapter = new TabsAdapter(this, mViewPager); mTabsAdapter.addTab(bar.newTab().setText("Simple"), CountingFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("List"), FragmentPagerSupport.ArrayListFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText("Cursor"), CursorFragment.class, null); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); } /** * This is a helper class that implements the management of tabs and all * details of connecting a ViewPager with associated TabHost. It relies on a * trick. Normally a tab host has a simple API for supplying a View or * Intent that each tab will show. This is not sufficient for switching * between pages. So instead we make the content part of the tab host * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy * view to show as the tab content. It listens to changes in tabs, and takes * care of switch to the correct paged in the ViewPager whenever the selected * tab changes. */ public static class TabsAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener { private final Context mContext; private final ActionBar mActionBar; private final ViewPager mViewPager; private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); static final class TabInfo { private final Class<?> clss; private final Bundle args; TabInfo(Class<?> _class, Bundle _args) { clss = _class; args = _args; } } public TabsAdapter(Activity activity, ViewPager pager) { super(activity.getFragmentManager()); mContext = activity; mActionBar = activity.getActionBar(); mViewPager = pager; mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { TabInfo info = new TabInfo(clss, args); tab.setTag(info); tab.setTabListener(this); mTabs.add(info); mActionBar.addTab(tab); notifyDataSetChanged(); } @Override public int getCount() { return mTabs.size(); } @Override public Fragment getItem(int position) { TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); } @Override public void onPageScrollStateChanged(int state) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Object tag = tab.getTag(); for (int i=0; i<mTabs.size(); i++) { if (mTabs.get(i) == tag) { mViewPager.setCurrentItem(i); } } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } } }
Nested classes |
|
---|---|
@interface |
ViewPager.DecorView 添加到视图寻呼机时允许将视图标记为装饰视图的注释。 |
class |
ViewPager.LayoutParams 应该为添加到ViewPager的视图提供的布局参数。 |
interface |
ViewPager.OnAdapterChangeListener 回调接口用于响应适配器更改。 |
interface |
ViewPager.OnPageChangeListener 回调界面,用于响应所选页面的更改状态。 |
interface |
ViewPager.PageTransformer 每当可见/附加页面滚动时,都会调用PageTransformer。 |
class |
ViewPager.SavedState 这是由ViewPager保存的持久状态。 |
class |
ViewPager.SimpleOnPageChangeListener 使用每种方法的存根实现简单实现 |
Inherited XML attributes |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
Constants |
|
---|---|
int |
SCROLL_STATE_DRAGGING 表示该传呼机当前正在被用户拖动。 |
int |
SCROLL_STATE_IDLE 表示寻呼机处于闲置状态。 |
int |
SCROLL_STATE_SETTLING 表示寻呼机正处于结算位置。 |
Inherited constants |
---|
From class android.view.ViewGroup
|
From class android.view.View
|
Inherited fields |
---|
From class android.view.View
|
Public constructors |
|
---|---|
ViewPager(Context context) |
|
ViewPager(Context context, AttributeSet attrs) |
Public methods |
|
---|---|
void |
addFocusables(ArrayList<View> views, int direction, int focusableMode) 我们只想要显示的当前页面是可以聚焦的。 |
void |
addOnAdapterChangeListener(ViewPager.OnAdapterChangeListener listener) 添加一个侦听器,只要此ViewPager的适配器发生更改,就会调用该侦听器。 |
void |
addOnPageChangeListener(ViewPager.OnPageChangeListener listener) 添加一个监听器,每当页面发生变化或增量滚动时都会调用该监听器。 |
void |
addTouchables(ArrayList<View> views) 我们只想要显示的当前页面是可触摸的。 |
void |
addView(View child, int index, ViewGroup.LayoutParams params) 添加具有指定布局参数的子视图。 |
boolean |
arrowScroll(int direction) |
boolean |
beginFakeDrag() 开始假传呼机的拖动。 |
boolean |
canScrollHorizontally(int direction) 检查此视图是否可以在某个方向上水平滚动。 |
void |
clearOnPageChangeListeners() 删除所有收到滚动状态或位置更改通知的侦听器。 |
void |
computeScroll() 由父级调用,以请求孩子在必要时更新mScrollX和mScrollY的值。 |
boolean |
dispatchKeyEvent(KeyEvent event) 将关键事件分派到焦点路径上的下一个视图。 |
boolean |
dispatchPopulateAccessibilityEvent(AccessibilityEvent event) 首先将 |
void |
draw(Canvas canvas) 手动将此视图(及其所有子项)呈现给定的Canvas。 |
void |
endFakeDrag() 结束传呼机的虚假拖动。 |
boolean |
executeKeyEvent(KeyEvent event) 您可以自己调用此函数以使滚动视图执行从关键事件滚动,就好像该事件已由视图层次结构分派给它一样。 |
void |
fakeDragBy(float xOffset) 假像素拖动一个偏移量。 |
ViewGroup.LayoutParams |
generateLayoutParams(AttributeSet attrs) 根据提供的属性集返回一组新的布局参数。 |
PagerAdapter |
getAdapter() 检索当前的适配器提供页面。 |
int |
getCurrentItem() |
int |
getOffscreenPageLimit() 返回空闲状态下视图层次结构中当前页面任一侧将保留的页面数。 |
int |
getPageMargin() 返回页面之间的页边距。 |
boolean |
isFakeDragging() 如果假拖拽正在进行,则返回true。 |
boolean |
onInterceptTouchEvent(MotionEvent ev) 实施此方法来拦截所有触摸屏幕动作事件。 |
void |
onRestoreInstanceState(Parcelable state) 吊钩允许视图重新应用之前由 |
Parcelable |
onSaveInstanceState() 钩子允许视图生成其内部状态的表示,稍后可用于创建具有相同状态的新实例。 |
boolean |
onTouchEvent(MotionEvent ev) 实现此方法来处理触摸屏幕动作事件。 |
void |
removeOnAdapterChangeListener(ViewPager.OnAdapterChangeListener listener) 删除以前通过 |
void |
removeOnPageChangeListener(ViewPager.OnPageChangeListener listener) 删除以前通过 |
void |
removeView(View view) 注意:不要调用此方法 |
void |
setAdapter(PagerAdapter adapter) 根据需要设置一个PagerAdapter,它将为该寻呼机提供视图。 |
void |
setCurrentItem(int item) 设置当前选择的页面。 |
void |
setCurrentItem(int item, boolean smoothScroll) 设置当前选择的页面。 |
void |
setOffscreenPageLimit(int limit) 将闲置状态下应保留在视图层次结构中当前页面任一侧的页数。 |
void |
setOnPageChangeListener(ViewPager.OnPageChangeListener listener) 此方法已弃用。 改为使用 |
void |
setPageMargin(int marginPixels) 设置页面之间的页边距。 |
void |
setPageMarginDrawable(int resId) 设置一个可用于填充页面间空白的drawable。 |
void |
setPageMarginDrawable(Drawable d) 设置一个可用于填充页面间空白的drawable。 |
void |
setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer) 设置一个 |
Protected methods |
|
---|---|
boolean |
canScroll(View v, boolean checkV, int dx, int x, int y) 测试v的子视图中的可滚动性,给定dx的增量。 |
boolean |
checkLayoutParams(ViewGroup.LayoutParams p) |
void |
drawableStateChanged() 只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。 |
ViewGroup.LayoutParams |
generateDefaultLayoutParams() 返回一组默认布局参数。 |
ViewGroup.LayoutParams |
generateLayoutParams(ViewGroup.LayoutParams p) 根据提供的布局参数返回一组安全的布局参数。 |
int |
getChildDrawingOrder(int childCount, int i) 返回为此迭代绘制的子的索引。 |
void |
onAttachedToWindow() 这在视图附加到窗口时被调用。 |
void |
onDetachedFromWindow() 这是在视图从窗口分离时调用的。 |
void |
onDraw(Canvas canvas) 实施这个来做你的绘画。 |
void |
onLayout(boolean changed, int l, int t, int r, int b) 当这个视图为每个孩子分配一个大小和位置时,从布局调用。 |
void |
onMeasure(int widthMeasureSpec, int heightMeasureSpec) 测量视图及其内容以确定测量宽度和测量高度。 |
void |
onPageScrolled(int position, float offset, int offsetPixels) 此方法将在当前页面滚动时调用,或者作为程序启动的平滑滚动的一部分或用户启动的触摸滚动。 |
boolean |
onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) 我们只想要显示的当前页面是可以聚焦的。 |
void |
onSizeChanged(int w, int h, int oldw, int oldh) 当这个视图的大小发生变化时,这在布局期间被调用。 |
boolean |
verifyDrawable(Drawable who) 如果你的视图子类正在显示它自己的Drawable对象,它应该覆盖这个函数,并且对于它显示的任何Drawable返回true。 |
Inherited methods |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
|
From class java.lang.Object
|
|
From interface android.view.ViewParent
|
|
From interface android.view.ViewManager
|
|
From interface android.graphics.drawable.Drawable.Callback
|
|
From interface android.view.KeyEvent.Callback
|
|
From interface android.view.accessibility.AccessibilityEventSource
|
int SCROLL_STATE_DRAGGING
表示该传呼机当前正在被用户拖动。
常数值:1(0x00000001)
int SCROLL_STATE_IDLE
表示寻呼机处于闲置状态。 当前页面处于完全状态,并且没有动画正在进行。
常量值:0(0x00000000)
int SCROLL_STATE_SETTLING
表示寻呼机正处于结算位置。
常量值:2(0x00000002)
ViewPager (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
void addFocusables (ArrayList<View> views, int direction, int focusableMode)
我们只想要显示的当前页面是可以聚焦的。
Parameters | |
---|---|
views |
ArrayList : Focusable views found so far or null if all we are interested is the number of focusables. |
direction |
int : The direction of the focus. |
focusableMode |
int : The type of focusables to be added. |
void addOnAdapterChangeListener (ViewPager.OnAdapterChangeListener listener)
添加一个侦听器,只要此ViewPager的适配器发生更改,就会调用该侦听器。
Parameters | |
---|---|
listener |
ViewPager.OnAdapterChangeListener : listener to add |
void addOnPageChangeListener (ViewPager.OnPageChangeListener listener)
添加一个监听器,每当页面发生变化或增量滚动时都会调用该监听器。 见ViewPager.OnPageChangeListener
。
添加侦听器的组件在完成时应小心删除它。 拥有视图所有权的其他组件可能会调用clearOnPageChangeListeners()
来删除所有附加的侦听器。
Parameters | |
---|---|
listener |
ViewPager.OnPageChangeListener : listener to add |
void addTouchables (ArrayList<View> views)
我们只想要显示的当前页面是可触摸的。
Parameters | |
---|---|
views |
ArrayList : Touchable views found so far |
void addView (View child, int index, ViewGroup.LayoutParams params)
添加具有指定布局参数的子视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
child |
View : the child view to add |
index |
int : the position at which to add the child or -1 to add last |
params |
ViewGroup.LayoutParams : the layout parameters to set on the child |
boolean arrowScroll (int direction)
Parameters | |
---|---|
direction |
int
|
Returns | |
---|---|
boolean |
boolean beginFakeDrag ()
开始假传呼机的拖动。
如果您想使ViewPager的动作与另一个视图的触摸滚动同步,同时仍然让ViewPager控制捕捉动作和闪动行为,则虚假拖动很有用。 (例如视差滚动选项卡。)拨打fakeDragBy(float)
以模拟实际的拖动动作。 根据需要致电endFakeDrag()
以完成假拖拽。
在假拖动过程中,ViewPager将忽略所有的触摸事件。 如果一个真正的拖动已经在进行中,这个方法将返回false。
Returns | |
---|---|
boolean |
true if the fake drag began successfully, false if it could not be started. |
也可以看看:
boolean canScrollHorizontally (int direction)
检查此视图是否可以在某个方向上水平滚动。
Parameters | |
---|---|
direction |
int : Negative to check scrolling left, positive to check scrolling right. |
Returns | |
---|---|
boolean |
true if this view can be scrolled in the specified direction, false otherwise. |
void clearOnPageChangeListeners ()
删除所有收到滚动状态或位置更改通知的侦听器。
void computeScroll ()
由父级调用,以请求孩子在必要时更新mScrollX和mScrollY的值。 这通常会在孩子使用Scroller
对象动画滚动时Scroller
。
boolean dispatchKeyEvent (KeyEvent event)
将关键事件分派到焦点路径上的下一个视图。 此路径从视图树的顶部向下延伸到当前聚焦的视图。 如果这个观点有重点,它会发送给自己。 否则,它将沿着焦点路径调度下一个节点。 这个方法也会触发任何关键的监听器。
Parameters | |
---|---|
event |
KeyEvent : The key event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)
首先将AccessibilityEvent
给View
,然后分配给其子项以将其文本内容添加到事件中。 请注意,事件文本是在单独的调度路径中填充的,因为我们不仅将源文本添加到事件中,而且还添加其所有后代的文本。 一个典型的实现将在这个视图上调用onPopulateAccessibilityEvent(AccessibilityEvent)
,然后调用每个孩子的dispatchPopulateAccessibilityEvent(AccessibilityEvent)
。 如果需要事件文本内容的自定义填充,则覆盖此方法。
如果 View.AccessibilityDelegate
已通过调用指定 setAccessibilityDelegate(AccessibilityDelegate)
其 dispatchPopulateAccessibilityEvent(View, AccessibilityEvent)
负责处理此调用。
注意:某些类型的辅助功能事件不会通过此方法分派用于填充事件文本。 详情请参阅AccessibilityEvent
。
Parameters | |
---|---|
event |
AccessibilityEvent : The event. |
Returns | |
---|---|
boolean |
True if the event population was completed. |
void draw (Canvas canvas)
手动将此视图(及其所有子项)呈现给定的Canvas。 在调用这个函数之前,视图必须已经完成了一个完整的布局。 在实现视图时,实现onDraw(android.graphics.Canvas)
而不是重写此方法。 如果您确实需要重写此方法,请调用超类版本。
Parameters | |
---|---|
canvas |
Canvas : The Canvas to which the View is rendered. |
boolean executeKeyEvent (KeyEvent event)
您可以自己调用此函数以使滚动视图执行从关键事件滚动,就好像该事件已由视图层次结构分派给它一样。
Parameters | |
---|---|
event |
KeyEvent : The key event to execute. |
Returns | |
---|---|
boolean |
Return true if the event was handled, else false. |
void fakeDragBy (float xOffset)
假像素拖动一个偏移量。 您必须先拨打beginFakeDrag()
。
Parameters | |
---|---|
xOffset |
float : Offset in pixels to drag by. |
也可以看看:
ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
根据提供的属性集返回一组新的布局参数。
Parameters | |
---|---|
attrs |
AttributeSet : the attributes to build the layout parameters from |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
PagerAdapter getAdapter ()
检索当前的适配器提供页面。
Returns | |
---|---|
PagerAdapter |
The currently registered PagerAdapter |
int getCurrentItem ()
Returns | |
---|---|
int |
int getOffscreenPageLimit ()
返回空闲状态下视图层次结构中当前页面任一侧将保留的页面数。 默认为1。
Returns | |
---|---|
int |
How many pages will be kept offscreen on either side |
也可以看看:
int getPageMargin ()
返回页面之间的页边距。
Returns | |
---|---|
int |
The size of the margin in pixels |
boolean isFakeDragging ()
如果假拖拽正在进行,则返回true。
Returns | |
---|---|
boolean |
true if currently in a fake drag, false otherwise. |
boolean onInterceptTouchEvent (MotionEvent ev)
实施此方法来拦截所有触摸屏幕动作事件。 这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。
使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)
有一个相当复杂的交互,并且使用它需要以正确的方式来实现这个方法。 活动将按以下顺序收到:
ACTION_CANCEL
, and all further events will be delivered to your onTouchEvent() method and no longer appear here. Parameters | |
---|---|
ev |
MotionEvent : The motion event being dispatched down the hierarchy. |
Returns | |
---|---|
boolean |
Return true to steal motion events from the children and have them dispatched to this ViewGroup through onTouchEvent(). The current target will receive an ACTION_CANCEL event, and no further messages will be delivered here. |
void onRestoreInstanceState (Parcelable state)
吊钩允许视图重新应用先前由onSaveInstanceState()
生成的内部状态的表示。 这个函数永远不会被调用为null状态。
Parameters | |
---|---|
state |
Parcelable : The frozen state that had previously been returned by onSaveInstanceState() . |
Parcelable onSaveInstanceState ()
钩子允许视图生成其内部状态的表示,稍后可用于创建具有相同状态的新实例。 此状态应仅包含不持久或以后不能重建的信息。 例如,您永远不会将当前位置存储在屏幕上,因为当视图的新实例放置在其视图层次结构中时会再次计算该位置。
您可能在此处存储的某些示例:文本视图中的当前光标位置(但通常不是文本本身,因为它存储在内容提供程序或其他永久性存储中),即当前在列表视图中选择的项目。
Returns | |
---|---|
Parcelable |
Returns a Parcelable object containing the view's current dynamic state, or null if there is nothing interesting to save. The default implementation returns null. |
boolean onTouchEvent (MotionEvent ev)
实现此方法来处理触摸屏幕动作事件。
如果此方法用于检测点击操作,建议通过执行并调用performClick()
来执行操作。 这将确保一致的系统行为,包括:
ACTION_CLICK
when accessibility features are enabled Parameters | |
---|---|
ev |
MotionEvent : The motion event. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
void removeOnAdapterChangeListener (ViewPager.OnAdapterChangeListener listener)
删除以前通过 addOnAdapterChangeListener(OnAdapterChangeListener)
添加的侦听 addOnAdapterChangeListener(OnAdapterChangeListener)
。
Parameters | |
---|---|
listener |
ViewPager.OnAdapterChangeListener : listener to remove |
void removeOnPageChangeListener (ViewPager.OnPageChangeListener listener)
删除以前通过 addOnPageChangeListener(OnPageChangeListener)
添加的侦听 addOnPageChangeListener(OnPageChangeListener)
。
Parameters | |
---|---|
listener |
ViewPager.OnPageChangeListener : listener to remove |
void removeView (View view)
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
view |
View
|
void setAdapter (PagerAdapter adapter)
根据需要设置一个PagerAdapter,它将为该寻呼机提供视图。
Parameters | |
---|---|
adapter |
PagerAdapter : Adapter to use |
void setCurrentItem (int item)
设置当前选择的页面。 如果ViewPager已经通过其当前适配器的第一个布局,那么当前项目和指定项目之间将会有平滑的动画过渡。
Parameters | |
---|---|
item |
int : Item index to select |
void setCurrentItem (int item, boolean smoothScroll)
设置当前选择的页面。
Parameters | |
---|---|
item |
int : Item index to select |
smoothScroll |
boolean : True to smoothly scroll to the new item, false to transition immediately |
void setOffscreenPageLimit (int limit)
将闲置状态下应保留在视图层次结构中当前页面任一侧的页数。 超出此限制的页面将在需要时从适配器重新创建。
这是作为优化提供的。 如果您事先知道您需要支持的页面数量或者在您的页面上放置了延迟加载机制,那么调整此设置可以在分页动画和交互的感知平滑度方面带来好处。 如果您有一小部分页面(3-4)可以一次保持活动状态,那么随着用户来回翻页,新创建的视图子树的布局花费的时间会更少。
你应该保持低限,特别是如果你的页面有复杂的布局。 该设置默认为1。
Parameters | |
---|---|
limit |
int : How many pages will be kept offscreen in an idle state. |
void setOnPageChangeListener (ViewPager.OnPageChangeListener listener)
此方法已弃用。
改为使用addOnPageChangeListener(OnPageChangeListener)
和removeOnPageChangeListener(OnPageChangeListener)
。
设置一个侦听器,每当页面发生变化或增量滚动时都会调用该侦听器。 见ViewPager.OnPageChangeListener
。
Parameters | |
---|---|
listener |
ViewPager.OnPageChangeListener : Listener to set |
void setPageMargin (int marginPixels)
设置页面之间的页边距。
Parameters | |
---|---|
marginPixels |
int : Distance between adjacent pages in pixels |
void setPageMarginDrawable (int resId)
设置一个可用于填充页面间空白的drawable。
Parameters | |
---|---|
resId |
int : Resource ID of a drawable to display between pages |
void setPageMarginDrawable (Drawable d)
设置一个可用于填充页面间空白的drawable。
Parameters | |
---|---|
d |
Drawable : Drawable to display between pages |
void setPageTransformer (boolean reverseDrawingOrder, ViewPager.PageTransformer transformer)
设置一个ViewPager.PageTransformer
,每当滚动位置改变时,将为每个附加页面调用。 这允许应用程序将自定义属性转换应用到每个页面,覆盖默认的滑动外观。
注意:在Android 3.0之前,属性动画API不存在。 因此,在Android 3.0(API 11)之前设置PageTransformer将不起作用。
Parameters | |
---|---|
reverseDrawingOrder |
boolean : true if the supplied PageTransformer requires page views to be drawn from last to first instead of first to last. |
transformer |
ViewPager.PageTransformer : PageTransformer that will modify each page's animation properties |
boolean canScroll (View v, boolean checkV, int dx, int x, int y)
测试v的子视图中的可滚动性,给定dx的增量。
Parameters | |
---|---|
v |
View : View to test for horizontal scrollability |
checkV |
boolean : Whether the view v passed should itself be checked for scrollability (true), or just its children (false). |
dx |
int : Delta scrolled in pixels |
x |
int : X coordinate of the active touch point |
y |
int : Y coordinate of the active touch point |
Returns | |
---|---|
boolean |
true if child views of v can be scrolled by delta of dx. |
boolean checkLayoutParams (ViewGroup.LayoutParams p)
Parameters | |
---|---|
p |
ViewGroup.LayoutParams
|
Returns | |
---|---|
boolean |
void drawableStateChanged ()
只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。
如果View有一个StateListAnimator,它也将被调用来运行必要的状态改变动画。
重写此功能时,一定要调用超类。
ViewGroup.LayoutParams generateDefaultLayoutParams ()
返回一组默认布局参数。 当传递给addView(View)
的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。
Returns | |
---|---|
ViewGroup.LayoutParams |
a set of default layout parameters or null |
ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
根据提供的布局参数返回一组安全的布局参数。 当ViewGroup传递一个View,其布局参数不能通过checkLayoutParams(android.view.ViewGroup.LayoutParams)
的测试时,调用此方法。 此方法应该返回一组适合此ViewGroup的布局参数,可能是通过从指定的一组布局参数中复制适当的属性。
Parameters | |
---|---|
p |
ViewGroup.LayoutParams : The layout parameters to convert into a suitable set of layout parameters for this ViewGroup. |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
int getChildDrawingOrder (int childCount, int i)
返回为此迭代绘制的子的索引。 如果要更改儿童的绘图顺序,请覆盖此选项。 默认情况下,它返回i。
注:为了调用此方法,您必须首先调用 setChildrenDrawingOrderEnabled(boolean)
来启用子订单。
Parameters | |
---|---|
childCount |
int
|
i |
int : The current iteration. |
Returns | |
---|---|
int |
The index of the child to draw this iteration. |
void onAttachedToWindow ()
这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 注意,这个函数保证在onDraw(android.graphics.Canvas)
之前被调用,但是它可能在第一个onDraw之前的任何时候被调用,包括在onMeasure(int, int)
之前或之后。
void onDetachedFromWindow ()
这是在视图从窗口分离时调用的。 此时它不再有绘图表面。
void onDraw (Canvas canvas)
实施这个来做你的绘画。
Parameters | |
---|---|
canvas |
Canvas : the canvas on which the background will be drawn |
void onLayout (boolean changed, int l, int t, int r, int b)
当这个视图为每个孩子分配一个大小和位置时,从布局调用。 带孩子的派生类应该覆盖这个方法,并调用他们每个孩子的布局。
Parameters | |
---|---|
changed |
boolean : This is a new size or position for this view |
l |
int : Left position, relative to parent |
t |
int : Top position, relative to parent |
r |
int : Right position, relative to parent |
b |
int : Bottom position, relative to parent |
void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
测量视图及其内容以确定测量宽度和测量高度。 此方法由measure(int, int)
调用, measure(int, int)
子类覆盖以提供其内容的准确和有效的度量。
合同:覆盖此方法时, 必须调用setMeasuredDimension(int, int)
来存储此视图的测量宽度和高度。 不这样做会触发IllegalStateException
,由measure(int, int)
引发。 调用超类' onMeasure(int, int)
是一种有效的用法。
Measure的基类实现默认为背景大小,除非MeasureSpec允许更大的大小。 子类应该覆盖onMeasure(int, int)
以提供更好的内容度量。
如果此方法被覆盖,则子类的责任是确保测量的高度和宽度至少为视图的最小高度和宽度( getSuggestedMinimumHeight()
和 getSuggestedMinimumWidth()
)。
Parameters | |
---|---|
widthMeasureSpec |
int : horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |
heightMeasureSpec |
int : vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |
void onPageScrolled (int position, float offset, int offsetPixels)
此方法将在当前页面滚动时调用,或者作为程序启动的平滑滚动的一部分或用户启动的触摸滚动。 如果您重写此方法,则必须在onPageScrolled返回前调用超类实现(例如,super.onPageScrolled(position,offset,offsetPixels))。
Parameters | |
---|---|
position |
int : Position index of the first page currently being displayed. Page position+1 will be visible if positionOffset is nonzero. |
offset |
float : Value from [0, 1) indicating the offset from the page at position. |
offsetPixels |
int : Value in pixels indicating the offset from position. |
boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
我们只想要显示的当前页面是可以聚焦的。
Parameters | |
---|---|
direction |
int : One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT |
previouslyFocusedRect |
Rect : The rectangle (in this View's coordinate system) to give a finer grained hint about where focus is coming from. May be null if there is no hint. |
Returns | |
---|---|
boolean |
Whether focus was taken. |
void onSizeChanged (int w, int h, int oldw, int oldh)
当这个视图的大小发生变化时,这在布局期间被调用。 如果您刚刚添加到视图层次结构中,则会使用旧值0调用。
Parameters | |
---|---|
w |
int : Current width of this view. |
h |
int : Current height of this view. |
oldw |
int : Old width of this view. |
oldh |
int : Old height of this view. |
boolean verifyDrawable (Drawable who)
如果你的视图子类正在显示它自己的Drawable对象,它应该覆盖这个函数,并且对于它显示的任何Drawable返回true。 这样可以安排这些可绘制的动画。
重写此功能时,一定要调用超类。
Parameters | |
---|---|
who |
Drawable : The Drawable to verify. Return true if it is one you are displaying, else return the result of calling through to the super class. |
Returns | |
---|---|
boolean |
boolean If true than the Drawable is being displayed in the view; else false and it is not allowed to animate. |