zfman / TimetableView

一款开源、完善、高效的Android课程表控件,支持添加广告、课程重叠自动处理、透明背景设置、空白格子点击事件处理等丰富的功能,并且有完善的开发文档、案例以供参考
https://www.yuque.com/zhuangfei/timetableview/summary
MIT License
711 stars 106 forks source link

课程时间跨度较大时,课程重叠会出现问题,缺少课程动态颜色改变 #32

Closed guozhiling closed 4 years ago

guozhiling commented 4 years ago

1:课程时间跨度较大时,课程重叠会出现问题 问题描述 当自定义了一个很多的时间段 例如 private String[] DAY_ALL_TIME=new String[]{ "09:00","09:30","10:00","10:30","11:00","11:30", "12:00","12:30","13:00","13:30","14:00","14:30","15:00","15:30", "16:00","16:30","17:00","17:30","18:00","18:30","19:00","19:30", "20:00","20:30","21:00","21:30","22:00","22:30","23:00","23:30" }; 填充MySubject数据 例如 ` mySubject1.setStart(DAY_ALL_TIME[6]);//12:00开始 mySubject1.setStep(7);//7节课,到15:00结束

//课程有重叠 mySubject2.setStart(DAY_ALL_TIME[6]);//12:00开始 mySubject2.setStep(7);//7节课,到15:00结束

mySubject3.setStart(DAY_ALL_TIME[12]);//15:00开始 mySubject3.setStep(7);//7节课,到18:00结束

` 最终显示的itemview结果会全部合并到mySubject1 这个里面

看了下源码 引起的原因是由于 ScheduleSupport类下fliterSchedule()方法引起的 if(s.getStart()>=s2.getStart()&&s.getStart()<=(s2.getStart()+s2.getStep()-1)){ is=false; if(isThisWeek(s2,curWeek)){ break; }else if(isThisWeek(s,curWeek)){ result.remove(s2); result.add(s); } } 还有一个错误是重复的角标数字也不对 ScheduleSupport类下findSubjects()方法引起的 for (int i = 0; i < data.size(); i++) { Schedule bean = data.get(i); if (bean.getStart() >= subject.getStart() && bean.getStart() < (subject.getStart() + subject.getStep())) result.add(data.get(i)); }

2.缺少课程动态颜色改变 由于课程有“点名”和“未点名”的类型区分,而且是动态读取的,暂未找到动态设置每一个项的颜色方法 ` /**

@zfman

zfman commented 4 years ago

@guozhiling 1.你的setStart方法是什么?setStart应该设置一个开始的节次,你怎么设置了一个时间? 课程重叠的问题有考虑的,你再把问题补充下,补充一下mysubject1这个类

2.颜色池只用于静态颜色,动态修改课程项颜色是有监听器的,好像是OnItemBuildCallback,mtimetableview.callback就可以了。这个监听器会在课程项构建结束后回调,你可以做任何的处理,课程颜色什么的都可以设置的,你可以看下文档

guozhiling commented 4 years ago

嗯忘记补充了 这里其实对应的是时间数组的下标 mySubject1.setStart(6);//12:00开始 mySubject1.setStep(7);//7节课,到15:00结束

@zfman

zfman commented 4 years ago

@guozhiling 课程重叠这块处理的没有问题呀 mysubject1: 6-12节上课 mysubject2: 6-12节上课 mysubject3: 12-18节上课

这三节课已经重复了,mysubject3当然不会显示了

guozhiling commented 4 years ago

嗯,可能我描述有点问题,等我截个图, 理想状态应该是有2个重复,一个单独的, image 但是,实际显示出来的是3个何在一起重叠了 image

@zfman

zfman commented 4 years ago

@guozhiling 课程的开始和结束节次是什么?

guozhiling commented 4 years ago

mySubject1.setStart(15); mySubject1. setStep(5);

mySubject2.setStart(15); mySubject2. setStep(5);

mySubject3.setStart(19); mySubject3. setStep(5);

image

@zfman

zfman commented 4 years ago

15-19 15-19 19-23 这三节课已经重复了呀,有什么问题吗 @guozhiling

guozhiling commented 4 years ago

三个虽然重复了,但是其中有一个19-23会被合并到15-19这个显示项目里面,所以就会造成3个数据合并在一起,时间段显示不对的问题,就如楼上发的显示截图一样

zfman commented 4 years ago

19-23的和前两个课表有冲突,所以会被合并到前边的课程中,本来就是这样设计的呀。 前边的课程19节也有课,这个课表19节也有课。 @guozhiling

guozhiling commented 4 years ago

👌谢谢作者的耐心解答,由于业务需求要这样显示,所以看来我只能先暂时部分源码来实现了