Behavior相关资料

来源:互联网 发布:pdf阅读器软件下载 编辑:程序博客网 时间:2024/06/14 23:29
   public static abstract class Behavior<V extends View> {        .............        /**         * Determine whether the supplied child view has another specific sibling view as a         * layout dependency.         *         * <p>This method will be called at least once in response to a layout request. If it         * returns true for a given child and dependency view pair, the parent CoordinatorLayout         * will:</p>         * <ol>         *     <li>Always lay out this child after the dependent child is laid out, regardless         *     of child order.</li>         *     <li>Call {@link #onDependentViewChanged} when the dependency view's layout or         *     position changes.</li>         * </ol>         * 判断是否是所依赖的view。例如:return dependency instanceof ListView;判断child依赖的dependency是否是ListView * 只有返回true时才执行onDependentViewChanged方法         * @param parent the parent view of the given child         * @param child the child view to test         * @param dependency the proposed dependency of child         * @return true if child's layout depends on the proposed dependency's layout,         *         false otherwise         *         * @see #onDependentViewChanged(CoordinatorLayout, android.view.View, android.view.View)         */        public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) {            return false;        }        /**         * Respond to a change in a child's dependent view         *         * <p>This method is called whenever a dependent view changes in size or position outside         * of the standard layout flow. A Behavior may use this method to appropriately update         * the child view in response.</p>         *         * <p>A view's dependency is determined by         * {@link #layoutDependsOn(CoordinatorLayout, android.view.View, android.view.View)} or         * if {@code child} has set another view as it's anchor.</p>         *         * <p>Note that if a Behavior changes the layout of a child via this method, it should         * also be able to reconstruct the correct position in         * {@link #onLayoutChild(CoordinatorLayout, android.view.View, int) onLayoutChild}.         * <code>onDependentViewChanged</code> will not be called during normal layout since         * the layout of each child view will always happen in dependency order.</p>         *         * <p>If the Behavior changes the child view's size or position, it should return true.         * The default implementation returns false.</p>         * child依赖的view变化时在这个方法中做对child的相应改变,并且改变之后应该返回true         * @param parent the parent view of the given child         * @param child the child view to manipulate         * @param dependency the dependent view that changed         * @return true if the Behavior changed the child view's size or position, false otherwise         */        public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) {            return false;        }        /**         * Respond to a child's dependent view being removed.         *         * <p>This method is called after a dependent view has been removed from the parent.         * A Behavior may use this method to appropriately update the child view in response.</p>         *         * <p>A view's dependency is determined by         * {@link #layoutDependsOn(CoordinatorLayout, android.view.View, android.view.View)} or         * if {@code child} has set another view as it's anchor.</p>         * 当child依赖的view从父布局中移除时执行,当然前提是layoutDependsOn返回true         * @param parent the parent view of the given child         * @param child the child view to manipulate         * @param dependency the dependent view that has been removed         */        public void onDependentViewRemoved(CoordinatorLayout parent, V child, View dependency) {        }        /**         * Called when a descendant of the CoordinatorLayout attempts to initiate a nested scroll.         *         * <p>Any Behavior associated with any direct child of the CoordinatorLayout may respond         * to this event and return true to indicate that the CoordinatorLayout should act as         * a nested scrolling parent for this scroll. Only Behaviors that return true from         * this method will receive subsequent nested scroll events.</p> * 只要滑动就会被调用,要注意被依赖的view需要设置setNestedScrollingEnabled(true)         * 可以判断滑动方向,比如:(nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0 判断滑动方向是否为垂直方向         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param directTargetChild the child view of the CoordinatorLayout that either is or         *                          contains the target of the nested scroll operation         * @param target the descendant view of the CoordinatorLayout initiating the nested scroll         * @param nestedScrollAxes the axes that this nested scroll applies to. See         *                         {@link ViewCompat#SCROLL_AXIS_HORIZONTAL},         *                         {@link ViewCompat#SCROLL_AXIS_VERTICAL}         * @return true if the Behavior wishes to accept this nested scroll         *         * @see NestedScrollingParent#onStartNestedScroll(View, View, int)         */        public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,                V child, View directTargetChild, View target, int nestedScrollAxes) {            return false;        }        /**         * Called when a nested scroll has been accepted by the CoordinatorLayout.         *         * <p>Any Behavior associated with any direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param directTargetChild the child view of the CoordinatorLayout that either is or         *                          contains the target of the nested scroll operation         * @param target the descendant view of the CoordinatorLayout initiating the nested scroll         * @param nestedScrollAxes the axes that this nested scroll applies to. See         *                         {@link ViewCompat#SCROLL_AXIS_HORIZONTAL},         *                         {@link ViewCompat#SCROLL_AXIS_VERTICAL}         *         * @see NestedScrollingParent#onNestedScrollAccepted(View, View, int)         */        public void onNestedScrollAccepted(CoordinatorLayout coordinatorLayout, V child,                View directTargetChild, View target, int nestedScrollAxes) {            // Do nothing        }        /**         * Called when a nested scroll has ended.         *         * <p>Any Behavior associated with any direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * <p><code>onStopNestedScroll</code> marks the end of a single nested scroll event         * sequence. This is a good place to clean up any state related to the nested scroll.         * </p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param target the descendant view of the CoordinatorLayout that initiated         *               the nested scroll         *         * @see NestedScrollingParent#onStopNestedScroll(View)         */        public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) {            // Do nothing        }        /**         * Called when a nested scroll in progress has updated and the target has scrolled or         * attempted to scroll.         *         * <p>Any Behavior associated with the direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * <p><code>onNestedScroll</code> is called each time the nested scroll is updated by the         * nested scrolling child, with both consumed and unconsumed components of the scroll         * supplied in pixels. <em>Each Behavior responding to the nested scroll will receive the         * same values.</em>         * </p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param target the descendant view of the CoordinatorLayout performing the nested scroll         * @param dxConsumed horizontal pixels consumed by the target's own scrolling operation         * @param dyConsumed vertical pixels consumed by the target's own scrolling operation         * @param dxUnconsumed horizontal pixels not consumed by the target's own scrolling         *                     operation, but requested by the user         * @param dyUnconsumed vertical pixels not consumed by the target's own scrolling operation,         *                     but requested by the user         *         * @see NestedScrollingParent#onNestedScroll(View, int, int, int, int)         */        public void onNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target,                int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {            // Do nothing        }        /**         * Called when a nested scroll in progress is about to update, before the target has         * consumed any of the scrolled distance.         *         * <p>Any Behavior associated with the direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * <p><code>onNestedPreScroll</code> is called each time the nested scroll is updated         * by the nested scrolling child, before the nested scrolling child has consumed the scroll         * distance itself. <em>Each Behavior responding to the nested scroll will receive the         * same values.</em> The CoordinatorLayout will report as consumed the maximum number         * of pixels in either direction that any Behavior responding to the nested scroll reported         * as consumed.</p> * onStartNestedScroll返回true时被调用         * 由上往下滑动dy<0并且滑动的力度越大dy越小;由下往上滑动dy>0并且滑动的力度越大dy越大。         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param target the descendant view of the CoordinatorLayout performing the nested scroll         * @param dx the raw horizontal number of pixels that the user attempted to scroll         * @param dy the raw vertical number of pixels that the user attempted to scroll         * @param consumed out parameter. consumed[0] should be set to the distance of dx that         *                 was consumed, consumed[1] should be set to the distance of dy that         *                 was consumed         *         * @see NestedScrollingParent#onNestedPreScroll(View, int, int, int[])         */        public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target,                int dx, int dy, int[] consumed) {            // Do nothing        }        /**         * Called when a nested scrolling child is starting a fling or an action that would         * be a fling.         *         * <p>Any Behavior associated with the direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * <p><code>onNestedFling</code> is called when the current nested scrolling child view         * detects the proper conditions for a fling. It reports if the child itself consumed         * the fling. If it did not, the child is expected to show some sort of overscroll         * indication. This method should return true if it consumes the fling, so that a child         * that did not itself take an action in response can choose not to show an overfling         * indication.</p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param target the descendant view of the CoordinatorLayout performing the nested scroll         * @param velocityX horizontal velocity of the attempted fling         * @param velocityY vertical velocity of the attempted fling         * @param consumed true if the nested child view consumed the fling         * @return true if the Behavior consumed the fling         *         * @see NestedScrollingParent#onNestedFling(View, float, float, boolean)         */        public boolean onNestedFling(CoordinatorLayout coordinatorLayout, V child, View target,                float velocityX, float velocityY, boolean consumed) {            return false;        }        /**         * Called when a nested scrolling child is about to start a fling.         *         * <p>Any Behavior associated with the direct child of the CoordinatorLayout may elect         * to accept the nested scroll as part of {@link #onStartNestedScroll}. Each Behavior         * that returned true will receive subsequent nested scroll events for that nested scroll.         * </p>         *         * <p><code>onNestedPreFling</code> is called when the current nested scrolling child view         * detects the proper conditions for a fling, but it has not acted on it yet. A         * Behavior can return true to indicate that it consumed the fling. If at least one         * Behavior returns true, the fling should not be acted upon by the child.</p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param target the descendant view of the CoordinatorLayout performing the nested scroll         * @param velocityX horizontal velocity of the attempted fling         * @param velocityY vertical velocity of the attempted fling         * @return true if the Behavior consumed the fling         *         * @see NestedScrollingParent#onNestedPreFling(View, float, float)         */        public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, V child, View target,                float velocityX, float velocityY) {            return false;        }        /**         * Called when the window insets have changed.         *         * <p>Any Behavior associated with the direct child of the CoordinatorLayout may elect         * to handle the window inset change on behalf of it's associated view.         * </p>         *         * @param coordinatorLayout the CoordinatorLayout parent of the view this Behavior is         *                          associated with         * @param child the child view of the CoordinatorLayout this Behavior is associated with         * @param insets the new window insets.         *         * @return The insets supplied, minus any insets that were consumed         */        public WindowInsetsCompat onApplyWindowInsets(CoordinatorLayout coordinatorLayout,                V child, WindowInsetsCompat insets) {            return insets;        }        /**         * Hook allowing a behavior to re-apply a representation of its internal state that had         * previously been generated by {@link #onSaveInstanceState}. This function will never         * be called with a null state.         *         * @param parent the parent CoordinatorLayout         * @param child child view to restore from         * @param state The frozen state that had previously been returned by         *        {@link #onSaveInstanceState}.         *         * @see #onSaveInstanceState()         */        public void onRestoreInstanceState(CoordinatorLayout parent, V child, Parcelable state) {            // no-op        }        /**         * Hook allowing a behavior to generate a representation of its internal state         * that can later be used to create a new instance with that same state.         * This state should only contain information that is not persistent or can         * not be reconstructed later.         *         * <p>Behavior state is only saved when both the parent {@link CoordinatorLayout} and         * a view using this behavior have valid IDs set.</p>         *         * @param parent the parent CoordinatorLayout         * @param child child view to restore from         *         * @return Returns a Parcelable object containing the behavior's current dynamic         *         state.         *         * @see #onRestoreInstanceState(android.os.Parcelable)         * @see View#onSaveInstanceState()         */        public Parcelable onSaveInstanceState(CoordinatorLayout parent, V child) {            return BaseSavedState.EMPTY_STATE;        }    }

0 0
原创粉丝点击