这里实现的比较简单,是在Recyclerview控件外面加一个RelativeLayout,用于显示悬浮的内容,然后监听Recyclerview控件的addOnScrollListener。话不多说,直接上代码;
activity_recycler_view_xuan.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RecyclerViewXuanActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_xuan"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
<RelativeLayout
android:id="@+id/rela_top"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#ff3344">
<TextView
android:id="@+id/txt_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:text="2019-10-09"
android:textColor="#ffffff"/>
<TextView
android:id="@+id/txt_money"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:text="100.00元"
android:textColor="#ffffff"/>
</RelativeLayout>
</RelativeLayout>
RecyclerViewXuanActivity.java
public class RecyclerViewXuanActivity extends AppCompatActivity {
private RecyclerView rv_xuan;
private LinearLayoutManager mManager;
private List<RecyclerXunModel> list_data;
private RecyclerXunAdapter rAdapter;
private int mTopHeight;
private RelativeLayout rela_top;
private TextView txt_date;
private TextView txt_money;
private int mCurrentPosition = 0;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view_xuan);
mContext = this;
initControls();
}
/**
* 初始化控件
*/
private void initControls() {
rela_top = (RelativeLayout)findViewById(R.id.rela_top);
txt_date = (TextView)findViewById(R.id.txt_date);
txt_money = (TextView)findViewById(R.id.txt_money);
rv_xuan = (RecyclerView)findViewById(R.id.rv_xuan);
mManager = new LinearLayoutManager(mContext);
rv_xuan.setLayoutManager(mManager);
list_data = new ArrayList<>();
initData();
rAdapter = new RecyclerXunAdapter(mContext,list_data);
rv_xuan.setAdapter(rAdapter);
rv_xuan.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
mTopHeight = rela_top.getHeight();
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
View view = mManager.findViewByPosition(mCurrentPosition + 1);
if(view.getTop() <= mTopHeight&&list_data.get(mCurrentPosition+1).getVisibleTitle()){
rela_top.setY(-(mTopHeight - view.getTop()));
}else{
rela_top.setY(0);
txt_date.setText(list_data.get(mCurrentPosition).getmDate());
txt_money.setText(list_data.get(mCurrentPosition).getmMoney());
}
if(mCurrentPosition != mManager.findFirstVisibleItemPosition()){
mCurrentPosition = mManager.findFirstVisibleItemPosition();
rela_top.setY(0);
}
}
});
}
/**
* 初始化数据
*/
private void initData() {
RecyclerXunModel model1 = new RecyclerXunModel();
model1.setmDate("2019-10-01");
model1.setmMoney("101.00元");
model1.setVisibleTitle(true);
list_data.add(model1);
RecyclerXunModel model2 = new RecyclerXunModel();
model2.setmDate("2019-10-01");
model2.setmMoney("102.00元");
model2.setVisibleTitle(false);
list_data.add(model2);
RecyclerXunModel model3 = new RecyclerXunModel();
model3.setmDate("2019-10-01");
model3.setmMoney("102.00元");
model3.setVisibleTitle(false);
list_data.add(model3);
RecyclerXunModel model4 = new RecyclerXunModel();
model4.setmDate("2019-10-01");
model4.setmMoney("103.00元");
model4.setVisibleTitle(false);
list_data.add(model4);
RecyclerXunModel model5 = new RecyclerXunModel();
model5.setmDate("2019-10-01");
model5.setmMoney("104.00元");
model5.setVisibleTitle(false);
list_data.add(model5);
RecyclerXunModel model6 = new RecyclerXunModel();
model6.setmDate("2019-10-02");
model6.setmMoney("100.00元");
model6.setVisibleTitle(true);
list_data.add(model6);
RecyclerXunModel model7 = new RecyclerXunModel();
model7.setmDate("2019-10-02");
model7.setmMoney("101.00元");
model7.setVisibleTitle(false);
list_data.add(model7);
RecyclerXunModel model8 = new RecyclerXunModel();
model8.setmDate("2019-10-02");
model8.setmMoney("102.00元");
model8.setVisibleTitle(false);
list_data.add(model8);
RecyclerXunModel model9 = new RecyclerXunModel();
model9.setmDate("2019-10-02");
model9.setmMoney("103.00元");
model9.setVisibleTitle(false);
list_data.add(model9);
RecyclerXunModel model10 = new RecyclerXunModel();
model10.setmDate("2019-10-03");
model10.setmMoney("103.00元");
model10.setVisibleTitle(true);
list_data.add(model10);
RecyclerXunModel model11 = new RecyclerXunModel();
model11.setmDate("2019-10-03");
model11.setmMoney("104.00元");
model11.setVisibleTitle(false);
list_data.add(model11);
RecyclerXunModel model12 = new RecyclerXunModel();
model12.setmDate("2019-10-03");
model12.setmMoney("105.00元");
model12.setVisibleTitle(false);
list_data.add(model12);
RecyclerXunModel model13 = new RecyclerXunModel();
model13.setmDate("2019-10-03");
model13.setmMoney("106.00元");
model13.setVisibleTitle(true);
list_data.add(model13);
RecyclerXunModel model14 = new RecyclerXunModel();
model14.setmDate("2019-10-03");
model14.setmMoney("107.00元");
model14.setVisibleTitle(true);
list_data.add(model14);
RecyclerXunModel model15 = new RecyclerXunModel();
model15.setmDate("2019-10-04");
model15.setmMoney("1079.00元");
model15.setVisibleTitle(false);
list_data.add(model15);
RecyclerXunModel model16 = new RecyclerXunModel();
model16.setmDate("2019-10-04");
model16.setmMoney("1089.00元");
model16.setVisibleTitle(false);
list_data.add(model16);
RecyclerXunModel model17 = new RecyclerXunModel();
model17.setmDate("2019-10-04");
model17.setmMoney("1099.00元");
model17.setVisibleTitle(false);
list_data.add(model17);
RecyclerXunModel model18 = new RecyclerXunModel();
model18.setmDate("2019-10-04");
model18.setmMoney("1179.00元");
model18.setVisibleTitle(false);
list_data.add(model18);
RecyclerXunModel model19 = new RecyclerXunModel();
model19.setmDate("2019-10-04");
model19.setmMoney("1279.00元");
model19.setVisibleTitle(false);
list_data.add(model19);
RecyclerXunModel model20 = new RecyclerXunModel();
model20.setmDate("2019-10-04");
model20.setmMoney("10379.00元");
model20.setVisibleTitle(false);
list_data.add(model20);
RecyclerXunModel model21 = new RecyclerXunModel();
model21.setmDate("2019-10-05");
model21.setmMoney("11379.00元");
model21.setVisibleTitle(true);
list_data.add(model21);
RecyclerXunModel model22 = new RecyclerXunModel();
model22.setmDate("2019-10-05");
model22.setmMoney("12379.00元");
model22.setVisibleTitle(false);
list_data.add(model22);
RecyclerXunModel model23 = new RecyclerXunModel();
model23.setmDate("2019-10-05");
model23.setmMoney("13379.00元");
model23.setVisibleTitle(false);
list_data.add(model23);
RecyclerXunModel model24 = new RecyclerXunModel();
model24.setmDate("2019-10-05");
model24.setmMoney("14379.00元");
model24.setVisibleTitle(false);
list_data.add(model24);
RecyclerXunModel model25 = new RecyclerXunModel();
model25.setmDate("2019-10-05");
model25.setmMoney("15379.00元");
model25.setVisibleTitle(true);
list_data.add(model25);
txt_date.setText(list_data.get(0).getmDate());
txt_money.setText(list_data.get(0).getmMoney());
}
}
RecyclerXunModel.java
public class RecyclerXunModel {
private String mDate;
private String mMoney;
private Boolean isVisibleTitle;
public RecyclerXunModel() {
}
public String getmDate() {
return mDate;
}
public void setmDate(String mDate) {
this.mDate = mDate;
}
public String getmMoney() {
return mMoney;
}
public void setmMoney(String mMoney) {
this.mMoney = mMoney;
}
public Boolean getVisibleTitle() {
return isVisibleTitle;
}
public void setVisibleTitle(Boolean visibleTitle) {
isVisibleTitle = visibleTitle;
}
}
RecyclerXunAdapter.java
public class RecyclerXunAdapter extends RecyclerView.Adapter<RecyclerXunAdapter.myViewHolder> {
private Context mContext;
private List<RecyclerXunModel> list_data;
private LayoutInflater inflater;
public RecyclerXunAdapter(Context mContext, List<RecyclerXunModel> list_data) {
this.mContext = mContext;
this.list_data = list_data;
this.inflater = LayoutInflater.from(mContext);
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = inflater.inflate(R.layout.activity_xun_item,viewGroup,false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull myViewHolder myViewHolder, int i) {
myViewHolder.txt_cdate.setText(list_data.get(i).getmDate());
myViewHolder.txt_tdate.setText(list_data.get(i).getmDate());
myViewHolder.txt_cmoney.setText(list_data.get(i).getmMoney());
myViewHolder.txt_tmoney.setText(list_data.get(i).getmMoney());
int position = myViewHolder.getLayoutPosition();
if(position >= 1)
{
if(list_data.get(i).getmDate().equals(list_data.get(i-1).getmDate()))
{
myViewHolder.Rela_title.setVisibility(View.GONE);
list_data.get(i).setVisibleTitle(false);
}else{
myViewHolder.Rela_title.setVisibility(View.VISIBLE);
list_data.get(i).setVisibleTitle(true);
}
}else{
myViewHolder.Rela_title.setVisibility(View.VISIBLE);
list_data.get(i).setVisibleTitle(true);
}
}
@Override
public int getItemCount() {
return list_data.size();
}
class myViewHolder extends RecyclerView.ViewHolder
{
RelativeLayout Rela_title;
TextView txt_tdate;
TextView txt_tmoney;
TextView txt_cdate;
TextView txt_cmoney;
public myViewHolder(@NonNull View itemView) {
super(itemView);
Rela_title = (RelativeLayout)itemView.findViewById(R.id.Rela_title);
txt_tdate = (TextView)itemView.findViewById(R.id.txt_tdate);
txt_tmoney = (TextView)itemView.findViewById(R.id.txt_tmoney);
txt_cdate = (TextView)itemView.findViewById(R.id.txt_cdate);
txt_cmoney = (TextView)itemView.findViewById(R.id.txt_cmoney);
}
}
}
activity_xun_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/Rela_title"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#ff3344">
<TextView
android:id="@+id/txt_tdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:text="2019-10-09"
android:textColor="#ffffff"/>
<TextView
android:id="@+id/txt_tmoney"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:text="100.00元"
android:textColor="#ffffff"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp">
<TextView
android:id="@+id/txt_cdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="15dp"
android:text="2019-10-09"
android:textColor="#000000"/>
<TextView
android:id="@+id/txt_cmoney"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:text="100.00元"
android:textColor="#000000"/>
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#000000"/>
</LinearLayout>