Most visited

Recently visited

ViewPager

public class ViewPager
extends ViewGroup

java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.support.v4.view.ViewPager


布局管理器,允许用户在数据页面上左右翻转。 您提供了一个PagerAdapter的实现来生成该视图显示的页面。

ViewPager通常与Fragment结合使用,这是一种方便的方式来提供和管理每个页面的生命周期。 在ViewPager中实现了使用片段的标准适配器,它覆盖了最常见的用例。 这些是FragmentPagerAdapterFragmentStatePagerAdapter ; 这些类中的每一个都有简单的代码,显示如何与它们建立完整的用户界面。

使用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) {
        }
    }
}

Summary

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

使用每种方法的存根实现简单实现ViewPager.OnPageChangeListener接口。

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)

首先将 AccessibilityEventView ,然后分配给子项以将其文本内容添加到事件中。

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)

吊钩允许视图重新应用之前由 onSaveInstanceState()生成的内部状态的表示。

Parcelable onSaveInstanceState()

钩子允许视图生成其内部状态的表示,稍后可用于创建具有相同状态的新实例。

boolean onTouchEvent(MotionEvent ev)

实现此方法来处理触摸屏幕动作事件。

void removeOnAdapterChangeListener(ViewPager.OnAdapterChangeListener listener)

删除以前通过 addOnAdapterChangeListener(OnAdapterChangeListener)添加的侦听 addOnAdapterChangeListener(OnAdapterChangeListener)

void removeOnPageChangeListener(ViewPager.OnPageChangeListener listener)

删除以前通过 addOnPageChangeListener(OnPageChangeListener)添加的侦听 addOnPageChangeListener(OnPageChangeListener)

void removeView(View view)

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

void setAdapter(PagerAdapter adapter)

根据需要设置一个PagerAdapter,它将为该寻呼机提供视图。

void setCurrentItem(int item)

设置当前选择的页面。

void setCurrentItem(int item, boolean smoothScroll)

设置当前选择的页面。

void setOffscreenPageLimit(int limit)

将闲置状态下应保留在视图层次结构中当前页面任一侧的页数。

void setOnPageChangeListener(ViewPager.OnPageChangeListener listener)

此方法已弃用。 改为使用addOnPageChangeListener(OnPageChangeListener)removeOnPageChangeListener(OnPageChangeListener)

void setPageMargin(int marginPixels)

设置页面之间的页边距。

void setPageMarginDrawable(int resId)

设置一个可用于填充页面间空白的drawable。

void setPageMarginDrawable(Drawable d)

设置一个可用于填充页面间空白的drawable。

void setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer)

设置一个 ViewPager.PageTransformer ,每当滚动位置发生变化时,都会为每个附加页面调用。

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

Constants

SCROLL_STATE_DRAGGING

int SCROLL_STATE_DRAGGING

表示该传呼机当前正在被用户拖动。

常数值:1(0x00000001)

SCROLL_STATE_IDLE

int SCROLL_STATE_IDLE

表示寻呼机处于闲置状态。 当前页面处于完全状态,并且没有动画正在进行。

常量值:0(0x00000000)

SCROLL_STATE_SETTLING

int SCROLL_STATE_SETTLING

表示寻呼机正处于结算位置。

常量值:2(0x00000002)

Public constructors

ViewPager

ViewPager (Context context)

Parameters
context Context

ViewPager

ViewPager (Context context, 
                AttributeSet attrs)

Parameters
context Context
attrs AttributeSet

Public methods

addFocusables

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.

addOnAdapterChangeListener

void addOnAdapterChangeListener (ViewPager.OnAdapterChangeListener listener)

添加一个侦听器,只要此ViewPager的适配器发生更改,就会调用该侦听器。

Parameters
listener ViewPager.OnAdapterChangeListener: listener to add

addOnPageChangeListener

void addOnPageChangeListener (ViewPager.OnPageChangeListener listener)

添加一个监听器,每当页面发生变化或增量滚动时都会调用该监听器。 ViewPager.OnPageChangeListener

添加侦听器的组件在完成时应小心删除它。 拥有视图所有权的其他组件可能会调用clearOnPageChangeListeners()来删除所有附加的侦听器。

Parameters
listener ViewPager.OnPageChangeListener: listener to add

addTouchables

void addTouchables (ArrayList<View> views)

我们只想要显示的当前页面是可触摸的。

Parameters
views ArrayList: Touchable views found so far

addView

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

arrowScroll

boolean arrowScroll (int direction)

Parameters
direction int
Returns
boolean

beginFakeDrag

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.

也可以看看:

canScrollHorizontally

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.

clearOnPageChangeListeners

void clearOnPageChangeListeners ()

删除所有收到滚动状态或位置更改通知的侦听器。

computeScroll

void computeScroll ()

由父级调用,以请求孩子在必要时更新mScrollX和mScrollY的值。 这通常会在孩子使用Scroller对象动画滚动时Scroller

dispatchKeyEvent

boolean dispatchKeyEvent (KeyEvent event)

将关键事件分派到焦点路径上的下一个视图。 此路径从视图树的顶部向下延伸到当前聚焦的视图。 如果这个观点有重点,它会发送给自己。 否则,它将沿着焦点路径调度下一个节点。 这个方法也会触发任何关键的监听器。

Parameters
event KeyEvent: The key event to be dispatched.
Returns
boolean True if the event was handled, false otherwise.

dispatchPopulateAccessibilityEvent

boolean dispatchPopulateAccessibilityEvent (AccessibilityEvent event)

首先将AccessibilityEventView ,然后分配给其子项以将其文本内容添加到事件中。 请注意,事件文本是在单独的调度路径中填充的,因为我们不仅将源文本添加到事件中,而且还添加其所有后代的文本。 一个典型的实现将在这个视图上调用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.

draw

void draw (Canvas canvas)

手动将此视图(及其所有子项)呈现给定的Canvas。 在调用这个函数之前,视图必须已经完成了一个完整的布局。 在实现视图时,实现onDraw(android.graphics.Canvas)而不是重写此方法。 如果您确实需要重写此方法,请调用超类版本。

Parameters
canvas Canvas: The Canvas to which the View is rendered.

endFakeDrag

void endFakeDrag ()

结束传呼机的虚假拖动。

也可以看看:

executeKeyEvent

boolean executeKeyEvent (KeyEvent event)

您可以自己调用此函数以使滚动视图执行从关键事件滚动,就好像该事件已由视图层次结构分派给它一样。

Parameters
event KeyEvent: The key event to execute.
Returns
boolean Return true if the event was handled, else false.

fakeDragBy

void fakeDragBy (float xOffset)

假像素拖动一个偏移量。 您必须先拨打beginFakeDrag()

Parameters
xOffset float: Offset in pixels to drag by.

也可以看看:

generateLayoutParams

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

getAdapter

PagerAdapter getAdapter ()

检索当前的适配器提供页面。

Returns
PagerAdapter The currently registered PagerAdapter

getCurrentItem

int getCurrentItem ()

Returns
int

getOffscreenPageLimit

int getOffscreenPageLimit ()

返回空闲状态下视图层次结构中当前页面任一侧将保留的页面数。 默认为1。

Returns
int How many pages will be kept offscreen on either side

也可以看看:

getPageMargin

int getPageMargin ()

返回页面之间的页边距。

Returns
int The size of the margin in pixels

isFakeDragging

boolean isFakeDragging ()

如果假拖拽正在进行,则返回true。

Returns
boolean true if currently in a fake drag, false otherwise.

也可以看看:

onInterceptTouchEvent

boolean onInterceptTouchEvent (MotionEvent ev)

实施此方法来拦截所有触摸屏幕动作事件。 这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。

使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)有一个相当复杂的交互,并且使用它需要以正确的方式来实现这个方法。 活动将按以下顺序收到:

  1. You will receive the down event here.
  2. The down event will be handled either by a child of this view group, or given to your own onTouchEvent() method to handle; this means you should implement onTouchEvent() to return true, so you will continue to see the rest of the gesture (instead of looking for a parent view to handle it). Also, by returning true from onTouchEvent(), you will not receive any following events in onInterceptTouchEvent() and all touch processing must happen in onTouchEvent() like normal.
  3. For as long as you return false from this function, each following event (up to and including the final up) will be delivered first here and then to the target's onTouchEvent().
  4. If you return true from here, you will not receive any following events: the target view will receive the same event but with the action 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.

onRestoreInstanceState

void onRestoreInstanceState (Parcelable state)

吊钩允许视图重新应用先前由onSaveInstanceState()生成的内部状态的表示。 这个函数永远不会被调用为null状态。

Parameters
state Parcelable: The frozen state that had previously been returned by onSaveInstanceState().

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.

onTouchEvent

boolean onTouchEvent (MotionEvent ev)

实现此方法来处理触摸屏幕动作事件。

如果此方法用于检测点击操作,建议通过执行并调用performClick()来执行操作。 这将确保一致的系统行为,包括:

  • obeying click sound preferences
  • dispatching OnClickListener calls
  • handling ACTION_CLICK when accessibility features are enabled

Parameters
ev MotionEvent: The motion event.
Returns
boolean True if the event was handled, false otherwise.

removeOnAdapterChangeListener

void removeOnAdapterChangeListener (ViewPager.OnAdapterChangeListener listener)

删除以前通过 addOnAdapterChangeListener(OnAdapterChangeListener)添加的侦听 addOnAdapterChangeListener(OnAdapterChangeListener)

Parameters
listener ViewPager.OnAdapterChangeListener: listener to remove

removeOnPageChangeListener

void removeOnPageChangeListener (ViewPager.OnPageChangeListener listener)

删除以前通过 addOnPageChangeListener(OnPageChangeListener)添加的侦听 addOnPageChangeListener(OnPageChangeListener)

Parameters
listener ViewPager.OnPageChangeListener: listener to remove

removeView

void removeView (View view)

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

Parameters
view View

setAdapter

void setAdapter (PagerAdapter adapter)

根据需要设置一个PagerAdapter,它将为该寻呼机提供视图。

Parameters
adapter PagerAdapter: Adapter to use

setCurrentItem

void setCurrentItem (int item)

设置当前选择的页面。 如果ViewPager已经通过其当前适配器的第一个布局,那么当前项目和指定项目之间将会有平滑的动画过渡。

Parameters
item int: Item index to select

setCurrentItem

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

setOffscreenPageLimit

void setOffscreenPageLimit (int limit)

将闲置状态下应保留在视图层次结构中当前页面任一侧的页数。 超出此限制的页面将在需要时从适配器重新创建。

这是作为优化提供的。 如果您事先知道您需要支持的页面数量或者在您的页面上放置了延迟加载机制,那么调整此设置可以在分页动画和交互的感知平滑度方面带来好处。 如果您有一小部分页面(3-4)可以一次保持活动状态,那么随着用户来回翻页,新创建的视图子树的布局花费的时间会更少。

你应该保持低限,特别是如果你的页面有复杂的布局。 该设置默认为1。

Parameters
limit int: How many pages will be kept offscreen in an idle state.

setOnPageChangeListener

void setOnPageChangeListener (ViewPager.OnPageChangeListener listener)

此方法已弃用。
改为使用addOnPageChangeListener(OnPageChangeListener)removeOnPageChangeListener(OnPageChangeListener)

设置一个侦听器,每当页面发生变化或增量滚动时都会调用该侦听器。 ViewPager.OnPageChangeListener

Parameters
listener ViewPager.OnPageChangeListener: Listener to set

setPageMargin

void setPageMargin (int marginPixels)

设置页面之间的页边距。

Parameters
marginPixels int: Distance between adjacent pages in pixels

也可以看看:

setPageMarginDrawable

void setPageMarginDrawable (int resId)

设置一个可用于填充页面间空白的drawable。

Parameters
resId int: Resource ID of a drawable to display between pages

setPageMarginDrawable

void setPageMarginDrawable (Drawable d)

设置一个可用于填充页面间空白的drawable。

Parameters
d Drawable: Drawable to display between pages

setPageTransformer

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

Protected methods

canScroll

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.

checkLayoutParams

boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams
Returns
boolean

drawableStateChanged

void drawableStateChanged ()

只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。

如果View有一个StateListAnimator,它也将被调用来运行必要的状态改变动画。

重写此功能时,一定要调用超类。

generateDefaultLayoutParams

ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组默认布局参数。 当传递给addView(View)的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。

Returns
ViewGroup.LayoutParams a set of default layout parameters or null

generateLayoutParams

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

getChildDrawingOrder

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.

onAttachedToWindow

void onAttachedToWindow ()

这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 注意,这个函数保证在onDraw(android.graphics.Canvas)之前被调用,但是它可能在第一个onDraw之前的任何时候被调用,包括在onMeasure(int, int)之前或之后。

onDetachedFromWindow

void onDetachedFromWindow ()

这是在视图从窗口分离时调用的。 此时它不再有绘图表面。

onDraw

void onDraw (Canvas canvas)

实施这个来做你的绘画。

Parameters
canvas Canvas: the canvas on which the background will be drawn

onLayout

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

onMeasure

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.

onPageScrolled

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.

onRequestFocusInDescendants

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.

onSizeChanged

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.

verifyDrawable

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.

Hooray!