自定义RecyclerView:
public class MyRecyclerView extends RecyclerView {
private BaseDecoration mDecoration;
public MyRecyclerView(Context context) {
super(context);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void addItemDecoration(ItemDecoration decor) {
if (decor != null && decor instanceof BaseDecoration) {
mDecoration = (BaseDecoration) decor;
}
super.addItemDecoration(decor);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
if (mDecoration != null) {
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
mDecoration.onEventDown(e);
break;
case MotionEvent.ACTION_UP:
if (mDecoration.onEventUp(e)) {
return true;
}
break;
default:
}
}
return super.onInterceptTouchEvent(e);
}
}
MainActivity:
/**
* 文字悬浮
*/
public class StickyRecyclerViewActivity extends AppCompatActivity {
@BindView(R.id.rv)
MyRecyclerView mRecyclerView;
StickyAdapter mStickyAdapter;
List<City> dataList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sticky_recycler_view);
ButterKnife.bind(this);
initView();
}
private void initView() {
//模拟数据
dataList.addAll(CityUtil.getCityList());
dataList.addAll(CityUtil.getCityList());
//------------- StickyDecoration 使用部分 ----------------
StickyDecoration decoration = StickyDecoration.Builder
.init(new GroupListener() {
@Override
public String getGroupName(int position) {
//组名回调
if (position < dataList.size() && position > -1) {
//获取组名,用于判断是否是同一组
return dataList.get(position).getProvince();
}
return null;
}
})
//背景色
.setGroupBackground(ContextCompat.getColor(this, R.color.color_group_background))
//高度
.setGroupHeight(getResources().getDimensionPixelOffset(R.dimen.dp_35))
//分割线颜色
.setDivideColor(ContextCompat.getColor(this, R.color.color_divide))
//分割线高度 (默认没有分割线)
.setDivideHeight(getResources().getDimensionPixelOffset(R.dimen.dp_2))
//字体颜色 (默认黑色)
.setGroupTextColor(Color.RED)
//字体大小
.setGroupTextSize(getResources().getDimensionPixelOffset(R.dimen.sp_15))
// 边距 靠左时为左边距 靠右时为右边距
.setTextSideMargin(getResources().getDimensionPixelOffset(R.dimen.dp_10))
//点击事件,返回当前分组下的第一个item的position
.setOnClickListener(new OnGroupClickListener() {
@Override
public void onClick(int position, int id) {
//Group点击事件
String content = "onGroupClick --> " + dataList.get(position).getProvince();
Toast.makeText(StickyRecyclerViewActivity.this, content, Toast.LENGTH_SHORT).show();
}
})
.build();
//------------- StickyDecoration 使用部分 ----------------
RecyclerView.LayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(manager);
mRecyclerView.addItemDecoration(decoration);
mStickyAdapter = new StickyAdapter(this, dataList);
mRecyclerView.setAdapter(mStickyAdapter);
}
}