public void DrawHorizontal(Canvas c, RecyclerView parent)
        {
            var top    = parent.PaddingTop;
            var bottom = parent.PaddingBottom;

            RecyclerView.LayoutParams layoutParams = null;
            View child = null;

            var childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                child        = parent.GetChildAt(i);
                layoutParams = child.LayoutParameters.JavaCast <RecyclerView.LayoutParams>();
                var left  = child.Right + layoutParams.RightMargin;
                var right = left + divider.IntrinsicHeight;
                divider.SetBounds(left, top, right, bottom);
                divider.Draw(c);
            }

            if (child != null)
            {
                child.Dispose();
            }
            if (layoutParams != null)
            {
                layoutParams.Dispose();
            }
        }
示例#2
0
            public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
            {
                var colorItemViewHolder = (ColorItemViewHolder)holder;
                var colorName           = colors [position];

                colorItemViewHolder.ColorItem.SetColor(colorName);

                var layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MatchParent,
                                                                 ViewGroup.LayoutParams.WrapContent);

                var colorPickerItemMargin = (int)context.Resources.GetDimension(Resource.Dimension.DigitalConfigColorPickerItemMargin);

                // Add margins to first and last item to make it possible for user to tap on them.
                if (position == 0)
                {
                    layoutParams.SetMargins(0, colorPickerItemMargin, 0, 0);
                }
                else if (position == colors.Length - 1)
                {
                    layoutParams.SetMargins(0, 0, 0, colorPickerItemMargin);
                }
                else
                {
                    layoutParams.SetMargins(0, 0, 0, 0);
                }
                colorItemViewHolder.ItemView.LayoutParameters = layoutParams;
            }
        // Optional: custom inflating for ViewHolders without BindableViewHolderLayout attribute
        protected override View GetCustomLayoutForViewHolder(ViewGroup parent, Type viewHolderType)
        {
            var textView = new TextView(parent.Context);
            var lp       = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);

            textView.LayoutParameters = lp;

            return(textView);
        }
        protected override BaseRecyclerViewHolder <ReportsCalendarDayViewModel> CreateViewHolder(ViewGroup parent, LayoutInflater inflater, int viewType)
        {
            var calendarDayCellViewHolder = new CalendarDayCellViewHolder(parent.Context);
            var layoutParams = new RecyclerView.LayoutParams(parent.LayoutParameters);

            layoutParams.Width  = itemWidth;
            layoutParams.Height = 51.DpToPixels(parent.Context);
            calendarDayCellViewHolder.ItemView.LayoutParameters = layoutParams;
            return(calendarDayCellViewHolder);
        }
        // Create new views (invoked by the layout manager)
        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            // create a new view
            LocationPanel v = new LocationPanel(parent.Context);

            // set the view's size, margins, paddings and layout parameters
            RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);
            int margin = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 4, parent.Context.Resources.DisplayMetrics);

            layoutParams.SetMargins(0, margin, 0, margin); // l, t, r, b
            v.LayoutParameters = layoutParams;
            return(new ViewHolder(v, OnClick, OnLongClick));
        }
        public override void OnDrawOver(Canvas cValue, RecyclerView parent, RecyclerView.State state)
        {
            int left       = parent.PaddingLeft;
            int right      = parent.Width - parent.PaddingRight;
            int childCount = parent.ChildCount;

            for (int i = 1; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams)child.LayoutParameters;
                int size   = _dividerHeight;
                int top    = child.Top - lp.TopMargin - _dividerHeight;
                int bottom = top + size;
                _divider.Bounds = new Rect(left, top, right, bottom);
                _divider.Draw(cValue);
            }
        }
示例#7
0
        public override void OnDraw(Canvas c, RecyclerView parent, RecyclerView.State state)
        {
            int left  = parent.PaddingLeft;
            int right = parent.Width - parent.PaddingRight;

            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams parametres = (RecyclerView.LayoutParams)child.LayoutParameters;
                int top    = child.Bottom + parametres.BottomMargin;
                int bottom = top + divider.IntrinsicHeight;
                divider.SetBounds(left, top, right, bottom);
                divider.Draw(c);
            }
        }
        public void drawVertical(Canvas c, RecyclerView parent)
        {
            int left  = parent.PaddingLeft;
            int right = parent.Width - parent.PaddingRight;

            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams parameters = (RecyclerView.LayoutParams)child.LayoutParameters;
                int top    = child.Bottom + parameters.BottomMargin;
                int bottom = top + mDivider.IntrinsicHeight;
                mDivider.SetBounds(left, top, right, bottom);
                mDivider.Draw(c);
            }
        }
        public void drawHorizontal(Canvas c, RecyclerView parent)
        {
            int top    = parent.PaddingTop;
            int bottom = parent.Height - parent.PaddingBottom;

            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams parameters = (RecyclerView.LayoutParams)child.LayoutParameters;
                int left  = child.Right + parameters.RightMargin;
                int right = left + mDivider.IntrinsicHeight;
                mDivider.SetBounds(left, top, right, bottom);
                mDivider.Draw(c);
            }
        }
示例#10
0
        private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
                                       int heightSpec, int[] measuredDimension)
        {
            View view = recycler.GetViewForPosition(position);

            if (view != null)
            {
                RecyclerView.LayoutParams p = (RecyclerView.LayoutParams)view.LayoutParameters;
                int childWidthSpec          = ViewGroup.GetChildMeasureSpec(widthSpec,
                                                                            PaddingLeft + PaddingRight, p.Width);
                int childHeightSpec = ViewGroup.GetChildMeasureSpec(heightSpec,
                                                                    PaddingTop + PaddingBottom, p.Height);
                view.Measure(childWidthSpec, childHeightSpec);
                measuredDimension[0] = view.MeasuredWidth + p.LeftMargin + p.RightMargin;
                measuredDimension[1] = view.MeasuredHeight + p.BottomMargin + p.TopMargin;
                recycler.RecycleView(view);
            }
        }
        private void DrawVertical(Canvas c, RecyclerView parent)
        {
            int left               = parent.PaddingLeft;
            int right              = parent.Width - parent.PaddingRight;
            int recyclerViewTop    = parent.PaddingTop;
            int recyclerViewBottom = parent.Height - parent.PaddingBottom;
            int childCount         = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams layoutParams = child.LayoutParameters.JavaCast <RecyclerView.LayoutParams>();
                int top    = Math.Max(recyclerViewTop, child.Bottom + layoutParams.BottomMargin);
                int bottom = Math.Min(recyclerViewBottom, top + this.divider.IntrinsicHeight);
                this.divider.SetBounds(left, top, right, bottom);
                this.divider.Draw(c);
            }
        }
示例#12
0
        public void drawHorizontal(Canvas c, RecyclerView parent)
        {
            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)child
                                                         .LayoutParameters;
                int left  = child.Left - layoutParams.LeftMargin;
                int right = child.Right + layoutParams.RightMargin
                            + mDivider.IntrinsicWidth;
                int top    = child.Bottom + layoutParams.BottomMargin;
                int bottom = top + mDivider.IntrinsicHeight;
                mDivider.SetBounds(left, top, right, bottom);
                mDivider.Draw(c);
            }
        }
示例#13
0
        //竖屏时画竖线
        public void DrawVertical(Canvas c, RecyclerView parent)
        {
            int left       = parent.PaddingLeft;
            int right      = parent.Width - parent.PaddingRight;
            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                if (i + 1 == childCount)  //最后一项不用画线
                {
                    return;
                }
                View         childView            = parent.GetChildAt(i);
                RecyclerView v                    = new RecyclerView(parent.Context);
                RecyclerView.LayoutParams _params = (RecyclerView.LayoutParams)childView.LayoutParameters;
                int top    = childView.Bottom + _params.BottomMargin;
                int bottom = top + _divider.IntrinsicHeight;
                _divider.SetBounds(left, top, right, bottom);
                _divider.Draw(c);
            }
        }
示例#14
0
        //横屏时画横线
        public void DrawHorizontal(Canvas c, RecyclerView parent)
        {
            int top        = parent.PaddingTop;
            int bottom     = parent.Height - parent.PaddingBottom;
            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                if (i == childCount)   //最后一项不用画线
                {
                    return;
                }
                View         childView            = parent.GetChildAt(i);
                RecyclerView v                    = new RecyclerView(parent.Context);
                RecyclerView.LayoutParams _params = (RecyclerView.LayoutParams)childView.LayoutParameters;
                int left  = childView.Right + _params.RightMargin;
                int right = left + _divider.IntrinsicHeight;
                _divider.SetBounds(left, top, right, bottom);
                _divider.Draw(c);
            }
        }
示例#15
0
        /**
         * 添加或者移除条目
         *
         * @param recycler    RecyclerView
         * @param displayRect 显示区域
         * @param i           条目下标
         */
        private void AddOrRemove(RecyclerView.Recycler recycler, Rect displayRect, int i)
        {
            View child = recycler.GetViewForPosition(i);
            Rect rect  = GetItemFrameByPosition(i);

            if (!Rect.Intersects(displayRect, rect))
            {
                RemoveAndRecycleView(child, recycler);   // 回收入暂存区
            }
            else
            {
                AddView(child);
                MeasureChildWithMargins(child, mWidthUsed, mHeightUsed);
                RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams)child.LayoutParameters;// getLayoutParams();
                LayoutDecorated(child,
                                rect.Left - mOffsetX + lp.LeftMargin + PaddingLeft,
                                rect.Top - mOffsetY + lp.TopMargin + PaddingTop,
                                rect.Right - mOffsetX - lp.RightMargin + PaddingLeft,
                                rect.Bottom - mOffsetY - lp.BottomMargin + PaddingTop);
            }
        }
示例#16
0
        public override void OnDraw(Canvas c, RecyclerView parent, RecyclerView.State state)
        {
            base.OnDraw(c, parent, state);
            int dividerLeft  = 32;
            int dividerRight = parent.Width - 32;

            for (int i = 0; i < parent.ChildCount; i++)
            {
                if (i != parent.ChildCount - 1)
                {
                    View child = parent.GetChildAt(i);
                    RecyclerView.LayoutParams @params = (RecyclerView.LayoutParams)child.LayoutParameters;

                    int dividerTop    = child.Bottom + @params.BottomMargin;
                    int dividerBottom = dividerTop + mDivider.IntrinsicHeight;

                    mDivider.SetBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
                    mDivider.Draw(c);
                }
            }
        }
            public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
            {
                var colorItemViewHolder = (ColorItemViewHolder)holder;
                var colorName = colors [position];
                colorItemViewHolder.ColorItem.SetColor (colorName);

                var layoutParams = new RecyclerView.LayoutParams (ViewGroup.LayoutParams.MatchParent,
                                       ViewGroup.LayoutParams.WrapContent);

                var colorPickerItemMargin = (int)context.Resources.GetDimension (Resource.Dimension.DigitalConfigColorPickerItemMargin);

                // Add margins to first and last item to make it possible for user to tap on them.
                if (position == 0) {
                    layoutParams.SetMargins (0, colorPickerItemMargin, 0, 0);
                } else if (position == colors.Length - 1) {
                    layoutParams.SetMargins (0, 0, 0, colorPickerItemMargin);
                } else {
                    layoutParams.SetMargins (0, 0, 0, 0);
                }
                colorItemViewHolder.ItemView.LayoutParameters = layoutParams;
            }
示例#18
0
        public override void OnDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state)
        {
            if (!initiated)
            {
                Init();
            }

            if (parent.GetItemAnimator().IsRunning)
            {
                View lastViewComingDown = null;
                View firstViewComingUp  = null;

                // this is fixed
                int left  = 0;
                int right = parent.Width;

                // this we need to find out
                int top    = 0;
                int bottom = 0;

                // find relevant translating views
                int childCount = parent.GetLayoutManager().ChildCount;
                for (int i = 0; i < childCount; i++)
                {
                    View child = parent.GetLayoutManager().GetChildAt(i);
                    if (child.TranslationY < 0)
                    {
                        // view is coming down
                        lastViewComingDown = child;
                    }
                    else if (child.TranslationY > 0)
                    {
                        // view is coming up
                        if (firstViewComingUp == null)
                        {
                            firstViewComingUp = child;
                        }
                    }
                }

                if (lastViewComingDown != null && firstViewComingUp != null)
                {
                    // views are coming down AND going up to fill the void
                    top    = lastViewComingDown.Bottom + (int)lastViewComingDown.TranslationY;
                    bottom = firstViewComingUp.Top + (int)firstViewComingUp.TranslationY;
                }
                else if (lastViewComingDown != null)
                {
                    // views are going down to fill the void
                    top    = lastViewComingDown.Bottom + (int)lastViewComingDown.TranslationY;
                    bottom = lastViewComingDown.Bottom;
                }
                else if (firstViewComingUp != null)
                {
                    // views are coming up to fill the void
                    top    = firstViewComingUp.Top;
                    bottom = firstViewComingUp.Top + (int)firstViewComingUp.TranslationY;
                }

                background.SetBounds(left, top, right, bottom);
                background.Draw(canvas);
            }

            int dividerLeft  = parent.PaddingLeft;
            int dividerRight = parent.Width - parent.PaddingRight;

            int childCount1 = parent.ChildCount;

            for (int i = 0; i < childCount1; i++)
            {
                View child = parent.GetChildAt(i);

                RecyclerView.LayoutParams lParams = (RecyclerView.LayoutParams)child.LayoutParameters;

                int dividerTop    = child.Bottom + lParams.BottomMargin;
                int dividerBottom = dividerTop + divider.IntrinsicHeight;

                divider.SetBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
                divider.Draw(canvas);
            }

            base.OnDraw(canvas, parent, state);
        }
        public override void OnDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
        {
            RecyclerView.Adapter adapter = parent.GetAdapter();
            if (adapter == null)
            {
                return;
            }

            int itemCount = adapter.ItemCount;

            if (orientation == VERTICAL)
            {
                bool isRtl = ViewCompat.GetLayoutDirection(parent) == ViewCompat.LayoutDirectionRtl;
                int  paddingLeft;
                int  paddingRight;
                if (isRtl)
                {
                    paddingLeft  = paddingEnd;
                    paddingRight = paddingStart;
                }
                else
                {
                    paddingLeft  = paddingStart;
                    paddingRight = paddingEnd;
                }

                int left       = parent.PaddingLeft + paddingLeft;
                int right      = parent.Width - parent.PaddingRight - paddingRight;
                int childCount = parent.ChildCount;

                for (int i = 0; i < childCount; i++)
                {
                    View child = parent.GetChildAt(i);
                    RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams)child.LayoutParameters;
                    int position = parent.GetChildLayoutPosition(child);

                    bool show;
                    if (showDividerHelper != null)
                    {
                        show = showDividerHelper.ShowDivider(position + 1);
                    }
                    else
                    {
                        show = (position != itemCount - 1) || showLastDivider;
                    }
                    if (show)
                    {
                        int top = child.Bottom + lp.BottomMargin;
                        if (overlap)
                        {
                            top -= thickness;
                        }
                        int bottom = top + thickness;
                        rect.Set(left, top, right, bottom);
                        c.DrawRect(rect, paint);
                    }

                    if (position == 0)
                    {
                        if (showDividerHelper != null)
                        {
                            show = showDividerHelper.ShowDivider(0);
                        }
                        else
                        {
                            show = showFirstDivider;
                        }
                        if (show)
                        {
                            int bottom = child.Top + lp.TopMargin;
                            if (overlap)
                            {
                                bottom += thickness;
                            }
                            int top = bottom - thickness;
                            rect.Set(left, top, right, bottom);
                            c.DrawRect(rect, paint);
                        }
                    }
                }
            }
            else
            {
                int top        = parent.PaddingTop + paddingStart;
                int bottom     = parent.Height - parent.PaddingBottom - paddingEnd;
                int childCount = parent.ChildCount;

                for (int i = 0; i < childCount; i++)
                {
                    View child = parent.GetChildAt(i);
                    RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams)child.LayoutParameters;
                    int position = parent.GetChildLayoutPosition(child);

                    bool show;
                    if (showDividerHelper != null)
                    {
                        show = showDividerHelper.ShowDivider(position + 1);
                    }
                    else
                    {
                        show = (position != itemCount - 1) || showLastDivider;
                    }
                    if (show)
                    {
                        int left = child.Right + lp.RightMargin;
                        if (overlap)
                        {
                            left -= thickness;
                        }
                        int right = left + thickness;
                        rect.Set(left, top, right, bottom);
                        c.DrawRect(rect, paint);
                    }

                    if (position == 0)
                    {
                        if (showDividerHelper != null)
                        {
                            show = showDividerHelper.ShowDivider(0);
                        }
                        else
                        {
                            show = showFirstDivider;
                        }
                        if (show)
                        {
                            int right = child.Left + lp.LeftMargin;
                            if (overlap)
                            {
                                right += thickness;
                            }
                            int left = right - thickness;
                            rect.Set(left, top, right, bottom);
                            c.DrawRect(rect, paint);
                        }
                    }
                }
            }
        }
        public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
        {
            int orientation = 0;
            int headerCount = 0, footerCount = 0, dataCount;
            var adapterObj  = parent.GetAdapter();
            var adapterType = adapterObj.GetType();

            if (adapterType.IsAssignableFrom(typeof(RecyclerArrayAdapter <>)))
            {
                headerCount = (int)adapterType.GetMethod("GetHeaderCount").Invoke(adapterObj, null);
                footerCount = (int)adapterType.GetMethod("GetFooterCount").Invoke(adapterObj, null);
                dataCount   = (int)adapterType.GetMethod("GetCount").Invoke(adapterObj, null);
            }
            else
            {
                dataCount = parent.GetAdapter().ItemCount;
            }
            int dataStartPosition = headerCount;
            int dataEndPosition   = headerCount + dataCount;


            RecyclerView.LayoutManager layoutManager = parent.GetLayoutManager();
            if (layoutManager is StaggeredGridLayoutManager)
            {
                orientation = ((StaggeredGridLayoutManager)layoutManager).Orientation;
            }
            else if (layoutManager is GridLayoutManager)
            {
                orientation = ((GridLayoutManager)layoutManager).Orientation;
            }
            else if (layoutManager is LinearLayoutManager)
            {
                orientation = ((LinearLayoutManager)layoutManager).Orientation;
            }
            int start, end;

            if (orientation == OrientationHelper.Vertical)
            {
                start = parent.PaddingLeft + mPaddingLeft;
                end   = parent.Width - parent.PaddingRight - mPaddingRight;
            }
            else
            {
                start = parent.PaddingTop + mPaddingLeft;
                end   = parent.Height - parent.PaddingBottom - mPaddingRight;
            }

            int childCount = parent.ChildCount;

            for (int i = 0; i < childCount; i++)
            {
                View child    = parent.GetChildAt(i);
                int  position = parent.GetChildAdapterPosition(child);

                if (position >= dataStartPosition && position < dataEndPosition - 1 ||//数据项除了最后一项
                    (position == dataEndPosition - 1 && mDrawLastItem) ||    //数据项最后一项
                    (!(position >= dataStartPosition && position < dataEndPosition) && mDrawHeaderFooter)       //header&footer且可绘制
                    )
                {
                    if (orientation == OrientationHelper.Vertical)
                    {
                        RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)child.LayoutParameters;
                        int top    = child.Bottom + layoutParams.BottomMargin;
                        int bottom = top + mHeight;
                        mColorDrawable.SetBounds(start, top, end, bottom);
                        mColorDrawable.Draw(c);
                    }
                    else
                    {
                        RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)child.LayoutParameters;
                        int left  = child.Right + layoutParams.RightMargin;
                        int right = left + mHeight;
                        mColorDrawable.SetBounds(left, start, right, end);
                        mColorDrawable.Draw(c);
                    }
                }
            }
        }
示例#21
0
        public override void OnDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
        {
            if (mDivider == null)
            {
                base.OnDrawOver(c, parent, state);
                return;
            }

            // Initialization needed to avoid compiler warning
            int left = 0, right = 0, top = 0, bottom = 0, size;
            int orientation = getOrientation(parent);
            int childCount  = parent.ChildCount;

            if (orientation == LinearLayoutManager.Vertical)
            {
                size  = mDivider.IntrinsicHeight;
                left  = parent.PaddingLeft;
                right = parent.Width - parent.PaddingRight;
            }
            else
            { //horizontal
                size   = mDivider.IntrinsicWidth;
                top    = parent.PaddingTop;
                bottom = parent.Height - parent.PaddingBottom;
            }

            for (int i = mShowFirstDivider ? 0 : 1; i < childCount; i++)
            {
                View child = parent.GetChildAt(i);
                RecyclerView.LayoutParams parametrs = (RecyclerView.LayoutParams)child.LayoutParameters;

                if (orientation == LinearLayoutManager.Vertical)
                {
                    top    = child.Top - parametrs.TopMargin;
                    bottom = top + size;
                }
                else
                { //horizontal
                    left  = child.Left - parametrs.LeftMargin;
                    right = left + size;
                }
                mDivider.SetBounds(left, top, right, bottom);
                mDivider.Draw(c);
            }

            // show last divider
            if (mShowLastDivider && childCount > 0)
            {
                View child = parent.GetChildAt(childCount - 1);
                RecyclerView.LayoutParams parametrs = (RecyclerView.LayoutParams)child.LayoutParameters;
                if (orientation == LinearLayoutManager.Vertical)
                {
                    top    = child.Bottom + parametrs.BottomMargin;
                    bottom = top + size;
                }
                else
                { // horizontal
                    left  = child.Right + parametrs.RightMargin;
                    right = left + size;
                }
                mDivider.SetBounds(left, top, right, bottom);
                mDivider.Draw(c);
            }
        }