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
19
Source : StickyDecoration.java
with Apache License 2.0
from Gavin-ZYX
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
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);
}