Recyclerview悬浮置顶

这里实现的比较简单,是在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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值