效果:
代码:
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);
}
}
}
注意点:.顶部和底部的线条隐藏