コード例 #1
0
        protected override int GetNextPosition(int position, FlexibleView.LayoutManager.Direction direction)
        {
            if (mOrientation == HORIZONTAL)
            {
                switch (direction)
                {
                case FlexibleView.LayoutManager.Direction.Left:
                    if (position > 0)
                    {
                        return(position - 1);
                    }
                    break;

                case FlexibleView.LayoutManager.Direction.Right:
                    if (position < ItemCount - 1)
                    {
                        return(position + 1);
                    }
                    break;
                }
            }
            else
            {
                switch (direction)
                {
                case FlexibleView.LayoutManager.Direction.Up:
                    if (position > 0)
                    {
                        return(position - 1);
                    }
                    break;

                case FlexibleView.LayoutManager.Direction.Down:
                    if (position < ItemCount - 1)
                    {
                        return(position + 1);
                    }
                    break;
                }
            }

            return(NO_POSITION);
        }
コード例 #2
0
        // Converts a focusDirection to orientation.
        //
        // @param focusDirection One of {@link View#FOCUS_UP}, {@link View#FOCUS_DOWN},
        //                       {@link View#FOCUS_LEFT}, {@link View#FOCUS_RIGHT},
        //                       {@link View#FOCUS_BACKWARD}, {@link View#FOCUS_FORWARD}
        //                       or 0 for not applicable
        // @return {@link LayoutState#LAYOUT_START} or {@link LayoutState#LAYOUT_END} if focus direction
        // is applicable to current state, {@link LayoutState#INVALID_LAYOUT} otherwise.
        private int ConvertFocusDirectionToLayoutDirection(FlexibleView.LayoutManager.Direction focusDirection)
        {
            switch (focusDirection)
            {
            case FlexibleView.LayoutManager.Direction.Up:
                return(mOrientation == VERTICAL ? LayoutState.LAYOUT_START
                            : LayoutState.INVALID_LAYOUT);

            case FlexibleView.LayoutManager.Direction.Down:
                return(mOrientation == VERTICAL ? LayoutState.LAYOUT_END
                            : LayoutState.INVALID_LAYOUT);

            case FlexibleView.LayoutManager.Direction.Left:
                return(mOrientation == HORIZONTAL ? LayoutState.LAYOUT_START
                            : LayoutState.INVALID_LAYOUT);

            case FlexibleView.LayoutManager.Direction.Right:
                return(mOrientation == HORIZONTAL ? LayoutState.LAYOUT_END
                            : LayoutState.INVALID_LAYOUT);

            default:
                return(LayoutState.INVALID_LAYOUT);
            }
        }
コード例 #3
0
        internal override FlexibleView.ViewHolder OnFocusSearchFailed(FlexibleView.ViewHolder focused, FlexibleView.LayoutManager.Direction direction, FlexibleView.Recycler recycler)
        {
            if (ChildCount == 0)
            {
                return(null);
            }
            int layoutDir = ConvertFocusDirectionToLayoutDirection(direction);

            if (layoutDir == LayoutState.INVALID_LAYOUT)
            {
                return(null);
            }
            int maxScroll = (int)(MAX_SCROLL_FACTOR * mOrientationHelper.GetTotalSpace());

            UpdateLayoutState(layoutDir, maxScroll, false);
            mLayoutState.ScrollingOffset = LayoutState.SCROLLING_OFFSET_NaN;
            mLayoutState.Recycle         = false;
            Fill(recycler, mLayoutState, true, true);

            FlexibleView.ViewHolder nextFocus;
            if (layoutDir == LayoutState.LAYOUT_START)
            {
                nextFocus = GetChildAt(0);
            }
            else
            {
                nextFocus = GetChildAt(ChildCount - 1);
            }
            return(nextFocus);
        }