com.gavin.com.library.listener.GroupListener

Here are the examples of the java api com.gavin.com.library.listener.GroupListener taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

2 Examples 7

19 Source : StickyDecoration.java
with Apache License 2.0
from Gavin-ZYX

/**
 * Created by gavin
 * Created date 17/5/24
 * 文字悬浮
 * 利用分割线实现悬浮功能
 */
public clreplaced StickyDecoration extends BaseDecoration {

    @ColorInt
    private int // 字体颜色,默认黑色
    mGroupTextColor = Color.WHITE;

    // 边距 左边距
    private int mSideMargin = 10;

    // 字体大小
    private int mTextSize = 50;

    private GroupListener mGroupListener;

    private TextPaint mTextPaint;

    private Paint mGroutPaint;

    private StickyDecoration(GroupListener groupListener) {
        super();
        this.mGroupListener = groupListener;
        // 设置悬浮栏的画笔---mGroutPaint
        mGroutPaint = new Paint();
        mGroutPaint.setColor(mGroupBackground);
        // 设置悬浮栏中文本的画笔
        mTextPaint = new TextPaint();
        mTextPaint.setAntiAlias(true);
        mTextPaint.setTextSize(mTextSize);
        mTextPaint.setColor(mGroupTextColor);
        mTextPaint.setTextAlign(Paint.Align.LEFT);
    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        super.onDrawOver(c, parent, state);
        final int itemCount = state.gereplacedemCount();
        final int childCount = parent.getChildCount();
        final int left = parent.getPaddingLeft();
        final int right = parent.getWidth() - parent.getPaddingRight();
        for (int i = 0; i < childCount; i++) {
            View childView = parent.getChildAt(i);
            int position = parent.getChildAdapterPosition(childView);
            int realPosition = getRealPosition(position);
            if (isFirstInGroup(realPosition) || isFirstInRecyclerView(realPosition, i)) {
                // 绘制悬浮
                // 决定当前顶部第一个悬浮Group的bottom
                int bottom = !mSticky ? childView.getTop() : Math.max(mGroupHeight, (childView.getTop() + parent.getPaddingTop()));
                if (mSticky && position + 1 < itemCount) {
                    // 下一组的第一个View接近头部
                    int viewBottom = childView.getBottom();
                    if (isLastLineInGroup(parent, realPosition) && viewBottom < bottom) {
                        bottom = viewBottom;
                    }
                }
                drawDecoration(c, realPosition, left, right, bottom);
                if (mOnGroupClickListener != null) {
                    stickyHeaderPosArray.put(realPosition, new ClickInfo(bottom));
                }
            } else {
                // 绘制分割线
                drawDivide(c, parent, childView, realPosition, left, right);
            }
        }
    }

    /**
     * 绘制悬浮框
     *
     * @param c
     * @param realPosition
     * @param left
     * @param right
     * @param bottom
     */
    private void drawDecoration(Canvas c, int realPosition, int left, int right, int bottom) {
        // 当前item对应的Group
        String curGroupName;
        int firstPositionInGroup = getFirstInGroupWithCash(realPosition);
        curGroupName = getGroupName(firstPositionInGroup);
        // 根据top绘制group背景
        c.drawRect(left, bottom - mGroupHeight, right, bottom, mGroutPaint);
        if (curGroupName == null) {
            return;
        }
        Paint.FontMetrics fm = mTextPaint.getFontMetrics();
        // 文字竖直居中显示
        float baseLine = bottom - (mGroupHeight - (fm.bottom - fm.top)) / 2 - fm.bottom;
        // 获取文字宽度
        mSideMargin = Math.abs(mSideMargin);
        c.drawText(curGroupName, left + mSideMargin, baseLine, mTextPaint);
    }

    /**
     * 获取组名
     *
     * @param realPosition realPosition
     * @return 组名
     */
    @Override
    String getGroupName(int realPosition) {
        if (mGroupListener != null) {
            return mGroupListener.getGroupName(realPosition);
        } else {
            return null;
        }
    }

    public static clreplaced Builder {

        private StickyDecoration mDecoration;

        private Builder(GroupListener groupListener) {
            mDecoration = new StickyDecoration(groupListener);
        }

        public static Builder init(GroupListener groupListener) {
            return new Builder(groupListener);
        }

        /**
         * 设置Group背景
         *
         * @param background 背景色
         */
        public Builder setGroupBackground(@ColorInt int background) {
            mDecoration.mGroupBackground = background;
            mDecoration.mGroutPaint.setColor(mDecoration.mGroupBackground);
            return this;
        }

        /**
         * 设置字体大小
         *
         * @param textSize 字体大小
         */
        public Builder setGroupTextSize(int textSize) {
            mDecoration.mTextSize = textSize;
            mDecoration.mTextPaint.setTextSize(mDecoration.mTextSize);
            return this;
        }

        /**
         * 设置Group高度
         *
         * @param groutHeight 高度
         * @return this
         */
        public Builder setGroupHeight(int groutHeight) {
            mDecoration.mGroupHeight = groutHeight;
            return this;
        }

        /**
         * 组TextColor
         *
         * @param color 颜色
         * @return this
         */
        public Builder setGroupTextColor(@ColorInt int color) {
            mDecoration.mGroupTextColor = color;
            mDecoration.mTextPaint.setColor(mDecoration.mGroupTextColor);
            return this;
        }

        /**
         * 设置边距
         * 靠左时为左边距  靠右时为右边距
         *
         * @param leftMargin 左右距离
         * @return this
         */
        public Builder setTextSideMargin(int leftMargin) {
            mDecoration.mSideMargin = leftMargin;
            return this;
        }

        /**
         * 设置分割线高度
         *
         * @param height 高度
         * @return this
         */
        public Builder setDivideHeight(int height) {
            mDecoration.mDivideHeight = height;
            return this;
        }

        /**
         * 设置分割线颜色
         *
         * @param color color
         * @return this
         */
        public Builder setDivideColor(@ColorInt int color) {
            mDecoration.mDivideColor = color;
            mDecoration.mDividePaint.setColor(color);
            return this;
        }

        /**
         * 设置点击事件
         *
         * @param listener 点击事件
         * @return this
         */
        public Builder setOnClickListener(OnGroupClickListener listener) {
            mDecoration.setOnGroupClickListener(listener);
            return this;
        }

        /**
         * 重置span
         *
         * @param recyclerView      recyclerView
         * @param gridLayoutManager gridLayoutManager
         * @return this
         */
        public Builder resetSpan(RecyclerView recyclerView, GridLayoutManager gridLayoutManager) {
            mDecoration.resetSpan(recyclerView, gridLayoutManager);
            return this;
        }

        /**
         * 设置头部数量
         * 用于顶部Header不需要设置悬浮的情况(仅LinearLayoutManager)
         * @param headerCount
         * @return
         */
        public Builder setHeaderCount(int headerCount) {
            if (headerCount >= 0) {
                mDecoration.mHeaderCount = headerCount;
            }
            return this;
        }

        /**
         * 设置是否需要悬浮
         * @param sticky
         * @return
         */
        public Builder setSticky(boolean sticky) {
            mDecoration.mSticky = sticky;
            return this;
        }

        public StickyDecoration build() {
            return mDecoration;
        }
    }
}

18 Source : ItemStickyActivity.java
with Apache License 2.0
from afkT

@Override
public void initValue() {
    super.initValue();
    ViewGroup parent = (ViewGroup) binding.vidBvrRecy.getParent();
    // 根布局处理
    ViewHelper.get().setPadding(parent, 0);
    // ======================
    // = 使用自定义悬浮 View =
    // ======================
    // PowerGroupListener listener = new PowerGroupListener() {
    // @Override
    // public String getGroupName(int position) {
    // return itemStickyAdapter.getData().get(position).timeTile;
    // }
    // 
    // @Override
    // public View getGroupView(int position) {
    // DevLogEngine.getEngine().dTag(TAG, String.valueOf(position));
    // View view = getLayoutInflater().inflate(R.layout.adapter_sticky_view, null, false);
    // TextViewUtils.setText(view.findViewById(R.id.vid_asv_replacedle_tv), getGroupName(position));
    // return view;
    // }
    // };
    // PowerfulStickyDecoration decoration = PowerfulStickyDecoration.Builder
    // .init(listener).setGroupHeight(SizeUtils.dipConvertPx(50.0f))
    // // 重置 span ( 注意 : 使用 GridLayoutManager 时必须调用 )
    // //.resetSpan(mRecyclerView, (GridLayoutManager) manager)
    // .build();
    // ================
    // = 默认悬浮 View =
    // ================
    GroupListener groupListener = new GroupListener() {

        @Override
        public String getGroupName(int position) {
            if (itemStickyAdapter != null) {
                try {
                    return itemStickyAdapter.getData().get(position).timeTile;
                } catch (Exception e) {
                }
            }
            return " ";
        }
    };
    StickyDecoration decoration = StickyDecoration.Builder.init(groupListener).setGroupBackground(ResourceUtils.getColor(R.color.color_f7)).setGroupTextColor(ResourceUtils.getColor(R.color.color_33)).setGroupTextSize(SizeUtils.spConvertPx(15.0f)).setTextSideMargin(SizeUtils.dipConvertPx(10.0f)).build();
    // 初始化布局管理器、适配器
    itemStickyAdapter = new ItemStickyAdapter(getList());
    binding.vidBvrRecy.setAdapter(itemStickyAdapter);
    binding.vidBvrRecy.addItemDecoration(decoration);
}