RecyclerView的制作时间轴

5 篇文章 0 订阅
1 篇文章 0 订阅

效果:

 

代码:

 

package com.yuanli.app.mvp.ui.adapter;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.jess.arms.utils.LogUtils;
import com.yuanli.app.R;
import com.yuanli.app.app.utils.DateUtils;
import com.yuanli.app.app.utils.TimeUtils;
import com.yuanli.app.app.utils.WeekUtil;
import com.yuanli.app.mvp.model.entity.TimeBean;
import com.yuanli.app.mvp.ui.activity.CommemorationActivity;


import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Calendar;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static androidx.constraintlayout.motion.widget.MotionScene.TAG;


public class TimeAxisAdapter extends RecyclerView.Adapter<TimeAxisAdapter.TimeAxisHolder> {

    private List<TimeBean> lists;
    private String currentdate = "";
    private List<Boolean> ListBoolean = new ArrayList<>();
    private List<Boolean> DateList = new ArrayList<>();
    private Map<Integer,String> LineMap = new HashMap<>();

    private int Year=0;
    private SimpleDateFormat sd;
    private SimpleDateFormat simpleDateFormat;

    public TimeAxisAdapter() {
        this.lists = new ArrayList<>();
        sd = new SimpleDateFormat("yyyy年MM月dd日");
        simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    }

    public void setLists(List<TimeBean> lists) {
        this.lists.clear();
        this.ListBoolean.clear();
        if (lists != null) {
            this.lists = lists;

            Calendar calendar = Calendar.getInstance();
            for (int i = 0; i < lists.size(); i++) {

                calendar.setTime(lists.get(i).getEvent_time());

                if(calendar.get(Calendar.YEAR)!= Year){
                    Year=calendar.get(Calendar.YEAR);
                    DateList.add(true);
                }else{
                    DateList.add(false);
                }

                String date = simpleDateFormat.format(lists.get(i).getEvent_time());
                if (!date.equals(currentdate)) {
                    ListBoolean.add(true);
                    currentdate = date;

                } else {
                    ListBoolean.add(false);
                }

                LineMap.put(Year,currentdate);
            }
            notifyDataSetChanged();

        }

    }

    @NonNull
    @Override
    public TimeAxisHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_timeaxis, parent, false);

        TimeAxisHolder timeAxisHolder = new TimeAxisHolder(view);
        timeAxisHolder.relative.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = timeAxisHolder.getAdapterPosition();
                Intent in = new Intent(view.getContext(), CommemorationActivity.class);
                in.putExtra("TimeBean", lists.get(position));
                view.getContext().startActivity(in);
            }
        });

        return timeAxisHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull TimeAxisHolder holder, int position) {


        Calendar calendar = Calendar.getInstance();
        calendar.setTime(lists.get(position).getEvent_time());

        if (position == lists.size() - 1) {
            holder.v_botton.setVisibility(View.INVISIBLE);
        } else {
            holder.v_botton.setVisibility(View.VISIBLE);
        }

       if( DateList.get(position)){
           holder.text_TimeYear.setVisibility(View.VISIBLE);
           calendar.setTime(lists.get(position).getEvent_time());
          holder.text_TimeYear.setText(""+calendar.get(Calendar.YEAR));
           holder.v_top.setVisibility(View.INVISIBLE);
       }else{
           holder.text_TimeYear.setVisibility(View.GONE);
           holder.v_top.setVisibility(View.VISIBLE);
       }


        String date = simpleDateFormat.format(lists.get(position).getEvent_time());
        if (LineMap.get(calendar.get(Calendar.YEAR)).equals(date)) {
            if (!ListBoolean.get(position)) {
                holder.v_top.setVisibility(View.INVISIBLE);
                holder.v_botton.setVisibility(View.INVISIBLE);
            } else {
                holder.v_botton.setVisibility(View.INVISIBLE);
            }
        }


        /*左边圆点*/
        if (ListBoolean.get(position)) {
            holder.Circ_img.setVisibility(View.VISIBLE);

            if (calendar.get(Calendar.MONTH) + 1 >= 10) {
                holder.TextMonth.setText("" + (calendar.get(Calendar.MONTH) + 1) + "月");
            } else {
                holder.TextMonth.setText("0" + (calendar.get(Calendar.MONTH) + 1) + "月");
            }
            holder.TextDay.setText("" + calendar.get(Calendar.DATE));

        } else {
            holder.TextMonth.setText("");
            holder.TextDay.setText("");
            holder.Circ_img.setVisibility(View.GONE);
        }


        holder.text_remarks.setText(lists.get(position).getEvent_name());

        holder.item_text.setText(sd.format(lists.get(position).getEvent_time()) + "  " +
                WeekUtil.dateToWeek(lists.get(position).getEvent_time()));

        if (DateUtils.isNumeric(lists.get(position).getBackground())) {
            int id = DateUtils.imgs[Integer.parseInt(lists.get(position).getBackground())];
            Glide.with(holder.itemView.getContext()).load(id).centerCrop().into(holder.img_item);
        } else {
            Bitmap bm = BitmapFactory.decodeFile(lists.get(position).getBackground());
            holder.img_item.setImageBitmap(bm);
        }


        /*剩余天数*/
        TimeUtils.getTime(lists.get(position).getEvent_time());
        String str2;
        if (TimeUtils.caculateTotalTime(lists.get(position).getEvent_time(),new Date())>0) {
            str2 = "还有<font color=\"#FF946A\"><big> " + TimeUtils.caculateTotalTime(lists.get(position).getEvent_time(),new Date()) + " </big></font>天";
        } else if (TimeUtils.caculateTotalTime(lists.get(position).getEvent_time(),new Date())<0){
            str2 = "已过<font color=\"#FF946A\"><big> " + -TimeUtils.caculateTotalTime(lists.get(position).getEvent_time(),new Date()) + " </big></font>天";
        }else{
            str2 = "<font color=\"#FF946A\"><big> 今天 </big></font>";
        }

        holder.text_DaysLeft.setText(Html.fromHtml(str2));




    }

    @Override
    public int getItemCount() {
        return lists.size();
    }

    class TimeAxisHolder extends RecyclerView.ViewHolder {

        TextView text_remarks, TextDay, TextMonth, item_text, text_DaysLeft,text_TimeYear;
        View v_top, v_botton;
        ImageView img_item, Circ_img;
        RelativeLayout relative;

        public TimeAxisHolder(@NonNull View itemView) {
            super(itemView);
            text_remarks = itemView.findViewById(R.id.text_remarks);
            v_top = itemView.findViewById(R.id.v_top);
            v_botton = itemView.findViewById(R.id.v_botton);
            TextDay = itemView.findViewById(R.id.text_item_day);
            TextMonth = itemView.findViewById(R.id.text_item_month);
            item_text = itemView.findViewById(R.id.item_text);
            img_item = itemView.findViewById(R.id.img_item);
            relative = itemView.findViewById(R.id.relative);
            Circ_img = itemView.findViewById(R.id.Circ_img);
            text_DaysLeft = itemView.findViewById(R.id.text_DaysLeft);
            text_TimeYear = itemView.findViewById(R.id.text_TimeYear);
        }


    }


}

 注意点:.顶部和底部的线条隐藏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值