Explorar o código

修改老师课表日历样式

Pq %!s(int64=3) %!d(string=hai) anos
pai
achega
4c2cb7ab02

+ 7 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/TimeUtils.java

@@ -1633,4 +1633,11 @@ public final class TimeUtils {
         return sb.toString();
     }
 
+    public static Date stringToDate(String strTime)
+            throws ParseException {
+        SimpleDateFormat formatter=getSafeDateFormat("yyyy-MM-dd");
+        Date date = null;
+        date = formatter.parse(strTime);
+        return date;
+    }
 }

+ 2 - 0
BaseLibrary/src/main/res/values/colors.xml

@@ -45,4 +45,6 @@
     <color name="color_6a6a6a">#6A6A6A</color>
     <color name="color_f3f3f3">#F3F3F3</color>
     <color name="color_d5d5d5">#D5D5D5</color>
+    <color name="color_ff6363">#FF6363</color>
+    <color name="color_30ffd7a6">#30FFD7A6</color>
 </resources>

+ 39 - 0
teacher/src/main/java/com/cooleshow/teacher/CourseHelper.java

@@ -0,0 +1,39 @@
+package com.cooleshow.teacher;
+
+import com.cooleshow.base.utils.TimeUtils;
+
+import java.sql.Time;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author by pq, Date on 2022/4/24.
+ */
+public class CourseHelper {
+    public static Map<String, com.haibin.calendarview.Calendar> filterDate(List<String> targetList) {
+        Map<String, com.haibin.calendarview.Calendar> calendarMap = new HashMap<>();
+        try {
+            for (int i = 0; i < targetList.size(); i++) {
+                String s = targetList.get(i);
+                Date date = TimeUtils.stringToDate(s);
+                int year = TimeUtils.getValueByCalendarField(date, Calendar.YEAR);
+                int month = TimeUtils.getValueByCalendarField(date, Calendar.MONTH) + 1;
+                int day = TimeUtils.getValueByCalendarField(date, Calendar.DAY_OF_MONTH);
+                com.haibin.calendarview.Calendar calendar = new com.haibin.calendarview.Calendar();
+                calendar.setYear(year);
+                calendar.setMonth(month);
+                calendar.setDay(day);
+                calendarMap.put(calendar.toString(), calendar);
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return calendarMap;
+    }
+}

+ 6 - 12
teacher/src/main/java/com/cooleshow/teacher/ui/main/CourseTableFragment.kt

@@ -15,6 +15,7 @@ import com.cooleshow.base.ui.fragment.BaseMVPFragment
 import com.cooleshow.base.utils.SizeUtils
 import com.cooleshow.base.utils.TimeUtils
 import com.cooleshow.base.utils.ToastUtils
+import com.cooleshow.teacher.CourseHelper
 import com.cooleshow.teacher.R
 import com.cooleshow.teacher.adapter.CourseTableListAdapter
 import com.cooleshow.teacher.bean.CourseTableDataBean
@@ -94,18 +95,7 @@ class CourseTableFragment :
             }
         })
         adapter.setOnItemClickListener(OnItemClickListener() { adapter, view, position ->
-            ToastUtils.showShort("点击position:" + position)
-            presenter.getCourseScheduleDateByMonth(calendarDate)
         })
-        addTestData()
-    }
-
-    private fun addTestData() {
-        var list = mutableListOf<CourseTableDataBean.StudentListBean?>()
-        for (i in 0 until 20) {
-            list.add(CourseTableDataBean.StudentListBean())
-        }
-        adapter.setNewInstance(list)
     }
 
     override fun initData() {
@@ -121,10 +111,10 @@ class CourseTableFragment :
             mViewBinding.calendarView.updateCurrentDate()
             mViewBinding.calendarView.clearSingleSelect()
         }
+        mViewBinding.calendarView.scrollToCalendar(year, month, day);
         setMontAndDay(year, month, day)
         currentSelectDate = TimeUtils.getNowDate()
         calendarDate = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("yyyy-MM"))
-        queryCurrentDataCourse()
     }
 
     private fun setMontAndDay(year: Int, month: Int, day: Int) {
@@ -200,6 +190,10 @@ class CourseTableFragment :
         }
         if (datas?.size != 0) {
             //更新日历表,显示有课字样
+            var maps = CourseHelper.filterDate(datas);
+            if (maps != null && maps.isNotEmpty()) {
+                mViewBinding.calendarView.addSchemeDate(maps)
+            }
         }
     }
 

+ 46 - 17
teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleMonthView.java

@@ -4,8 +4,12 @@ import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.RectF;
 import android.view.View;
 
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.teacher.R;
 import com.haibin.calendarview.Calendar;
 import com.haibin.calendarview.MonthView;
 
@@ -19,6 +23,13 @@ public class SimpleMonthView extends MonthView {
     private int mRadius;
     //    private Paint mPaint = new Paint();
     Context context;
+    private int maxSelectBgWidth;
+    private int spaceMarginBottom;
+    private int spaceMarginTop;
+    private int schemeTextSize;
+    private int schemeTextColor;
+    private int schemeTextColorSelect;
+    private Paint schemeBgPaint = new Paint();
 
     public SimpleMonthView(Context context) {
         super(context);
@@ -26,6 +37,16 @@ public class SimpleMonthView extends MonthView {
         //兼容硬件加速无效的代码
         setLayerType(View.LAYER_TYPE_SOFTWARE, mSelectedPaint);
         setBackgroundColor(Color.WHITE);
+        maxSelectBgWidth = SizeUtils.dp2px(32);
+        mRadius = SizeUtils.dp2px(2);
+        spaceMarginBottom = SizeUtils.dp2px(5);
+        spaceMarginTop = SizeUtils.dp2px(10);
+        schemeTextSize = SizeUtils.sp2px(10);
+        schemeTextColor = context.getResources().getColor(com.cooleshow.base.R.color.color_ff6363);
+        schemeTextColorSelect = context.getResources().getColor(R.color.white);
+        schemeBgPaint.setColor(context.getResources().getColor(com.cooleshow.base.R.color.color_30ffd7a6));
+        schemeBgPaint.setAntiAlias(true);
+        schemeBgPaint.setStyle(Paint.Style.FILL);
         //4.0以上硬件加速会导致无效
 //        mSelectedPaint.setMaskFilter(new BlurMaskFilter(25, BlurMaskFilter.Blur.SOLID));
 //
@@ -38,7 +59,8 @@ public class SimpleMonthView extends MonthView {
 
     @Override
     protected void onPreviewHook() {
-        mRadius = Math.min(mItemWidth, mItemHeight) / 2;
+//        mRadius = Math.min(mItemWidth, mItemHeight) / 2;
+        mRadius = SizeUtils.dp2px(2);
         mSchemePaint.setStyle(Paint.Style.STROKE);
     }
 
@@ -59,12 +81,20 @@ public class SimpleMonthView extends MonthView {
      */
     @Override
     protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
-        int cx = x + mItemWidth / 2;
-        int cy = y + mItemHeight / 2;
-        canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
+        RectF rect = buildRect(x, y);
+        canvas.drawRoundRect(rect, mRadius, mRadius, mSelectedPaint);
         return false;
     }
 
+    private RectF buildRect(int x, int y) {
+        RectF rect = new RectF();
+        rect.left = x + Math.abs(mItemWidth - maxSelectBgWidth) / 2;
+        rect.right = x + mItemWidth - Math.abs(mItemWidth - maxSelectBgWidth) / 2;
+        rect.top = y + spaceMarginTop;
+        rect.bottom = y + mItemHeight;
+        return rect;
+    }
+
     /**
      * 绘制标记的事件日子
      *
@@ -76,9 +106,8 @@ public class SimpleMonthView extends MonthView {
 
     @Override
     protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
-//        int cx = x + mItemWidth / 2;
-//        int cy = y + mItemHeight / 2;
-//        canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
+        RectF rect = buildRect(x, y);
+        canvas.drawRoundRect(rect, mRadius, mRadius, schemeBgPaint);
     }
 
     /**
@@ -103,23 +132,24 @@ public class SimpleMonthView extends MonthView {
                     cx,
                     baselineY,
                     mSelectTextPaint);
+            if (hasScheme) {
+                mSchemeTextPaint.setTextSize(schemeTextSize);
+                mSchemeTextPaint.setColor(schemeTextColorSelect);
+                canvas.drawText("有课", cx, y + mItemHeight - spaceMarginBottom, mSchemeTextPaint);
+            }
         } else if (hasScheme) {//否则绘制具有标记的
             canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()),
                     cx,
                     baselineY,
-                    calendar.isCurrentDay() ? mCurDayTextPaint :
-                            calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
-//            if (calendar.isCurrentDay()) {
-//                canvas.drawCircle(cx, cy, mRadius- dipToPx(context, 1), mPaint);
-//            }
+                    getPaint(calendar));
+            mSchemeTextPaint.setTextSize(schemeTextSize);
+            mSchemeTextPaint.setColor(schemeTextColor);
+            canvas.drawText("有课", cx, y + mItemHeight - spaceMarginBottom, mSchemeTextPaint);
         } else {//最好绘制普通文本
             canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()), cx, baselineY,
                     getPaint(calendar));
-//            if (calendar.isCurrentDay()) {
-//                canvas.drawCircle(cx, cy, mRadius- dipToPx(context, 1), mPaint);
-//            }
-
         }
+
     }
 
     private Paint getPaint(Calendar calendar) {
@@ -130,7 +160,6 @@ public class SimpleMonthView extends MonthView {
         if (calendar.isWeekend()) {
             return mCurDayTextPaint;
         }
-
         if (calendar.isCurrentMonth()) {
             return mCurMonthTextPaint;
         }

+ 59 - 14
teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleWeekView.java

@@ -4,8 +4,11 @@ import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
+import android.graphics.RectF;
 import android.view.View;
 
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.teacher.R;
 import com.haibin.calendarview.Calendar;
 import com.haibin.calendarview.WeekView;
 
@@ -16,15 +19,32 @@ import com.haibin.calendarview.WeekView;
 
 public class SimpleWeekView extends WeekView {
     private int mRadius;
-
     //    private Paint mPaint = new Paint();
     Context context;
 
+    private int maxSelectBgWidth;
+    private int spaceMarginBottom;
+    private int spaceMarginTop;
+    private int schemeTextSize;
+    private int schemeTextColor;
+    private int schemeTextColorSelect;
+    private Paint schemeBgPaint = new Paint();
+
     public SimpleWeekView(Context context) {
         super(context);
         this.context = context;
         setLayerType(View.LAYER_TYPE_SOFTWARE, mSelectedPaint);
         setBackgroundColor(Color.WHITE);
+        maxSelectBgWidth = SizeUtils.dp2px(32);
+        spaceMarginBottom = SizeUtils.dp2px(5);
+        spaceMarginTop = SizeUtils.dp2px(10);
+        schemeTextSize = SizeUtils.sp2px(10);
+        schemeTextColor = context.getResources().getColor(com.cooleshow.base.R.color.color_ff6363);
+        schemeTextColorSelect = context.getResources().getColor(R.color.white);
+        schemeBgPaint.setColor(context.getResources().getColor(com.cooleshow.base.R.color.color_30ffd7a6));
+        schemeBgPaint.setAntiAlias(true);
+        schemeBgPaint.setStyle(Paint.Style.FILL);
+
         //4.0以上硬件加速会导致无效
         //        mSelectedPaint.setMaskFilter(new BlurMaskFilter(25, BlurMaskFilter.Blur.SOLID));
 //        mPaint.setColor(0xFF01C1B5);
@@ -36,23 +56,32 @@ public class SimpleWeekView extends WeekView {
 
     @Override
     protected void onPreviewHook() {
-        mRadius = Math.min(mItemWidth, mItemHeight) / 2;
+        mRadius = SizeUtils.dp2px(2);
         mSchemePaint.setStyle(Paint.Style.STROKE);
     }
 
+    private RectF buildRect(int x, int y) {
+        RectF rect = new RectF();
+        rect.left = x + Math.abs(mItemWidth - maxSelectBgWidth) / 2;
+        rect.right = x + mItemWidth - Math.abs(mItemWidth - maxSelectBgWidth) / 2;
+        rect.top = y+spaceMarginTop;
+        rect.bottom = y + mItemHeight;
+        return rect;
+    }
+
     @Override
     protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, boolean hasScheme) {
         int cx = x + mItemWidth / 2;
         int cy = mItemHeight / 2;
-        canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
+        RectF rect = buildRect(x, 0);
+        canvas.drawRoundRect(rect, mRadius, mRadius, mSelectedPaint);
         return false;
     }
 
     @Override
     protected void onDrawScheme(Canvas canvas, Calendar calendar, int x) {
-        //        int cx = x + mItemWidth / 2;
-        //        int cy = mItemHeight / 2;
-        //        canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
+        RectF rect = buildRect(x, 0);
+        canvas.drawRoundRect(rect, mRadius, mRadius, schemeBgPaint);
     }
 
     @Override
@@ -66,26 +95,42 @@ public class SimpleWeekView extends WeekView {
                     cx,
                     baselineY,
                     mSelectTextPaint);
+
+            if (hasScheme) {
+                mSchemeTextPaint.setTextSize(schemeTextSize);
+                mSchemeTextPaint.setColor(schemeTextColorSelect);
+                canvas.drawText("有课", cx, mItemHeight - spaceMarginBottom, mSchemeTextPaint);
+            }
         } else if (hasScheme) {
             canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()),
                     cx,
                     baselineY,
-                    calendar.isCurrentDay() ? mCurDayTextPaint :
-                            calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
-//            if (calendar.isCurrentDay()) {
-//                canvas.drawCircle(cx, cy, mRadius- dipToPx(context, 1), mPaint);
-//            }
+                    getPaint(calendar));
+            mSchemeTextPaint.setTextSize(schemeTextSize);
+            mSchemeTextPaint.setColor(schemeTextColor);
+            canvas.drawText("有课", cx, mItemHeight - spaceMarginBottom, mSchemeTextPaint);
         } else {//最好绘制普通文本
             canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()), cx, baselineY,
                     calendar.isCurrentDay() ? mCurDayTextPaint :
                             calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
-//            if (calendar.isCurrentDay()) {
-//                canvas.drawCircle(cx, cy, mRadius- dipToPx(context, 1), mPaint);
-//            }
         }
 
     }
 
+    private Paint getPaint(Calendar calendar) {
+        if (calendar.isCurrentDay()) {
+            //当前日期
+            return mCurDayTextPaint;
+        }
+        if (calendar.isWeekend()) {
+            return mCurDayTextPaint;
+        }
+        if (calendar.isCurrentMonth()) {
+            return mCurMonthTextPaint;
+        }
+        return mOtherMonthTextPaint;
+    }
+
     /**
      * dp转px
      *

+ 2 - 2
teacher/src/main/res/layout/fragment_course_table_layout.xml

@@ -67,7 +67,7 @@
             android:layout_height="wrap_content"
             android:paddingStart="@dimen/dp_8"
             android:paddingEnd="@dimen/dp_8"
-            app:calendar_height="@dimen/dp_35"
+            app:calendar_height="@dimen/dp_56"
             app:week_line_background="@color/color_f2f2f2"
             app:year_view_background="@color/white"
             app:current_day_text_color="@color/colorPrimary"
@@ -80,7 +80,7 @@
             app:min_year="1990"
             app:month_view="com.cooleshow.teacher.widgets.SimpleMonthView"
             app:month_view_show_mode="mode_only_current"
-            app:scheme_text_color="@color/black_444"
+            app:scheme_text_color="@color/color_ff6363"
             app:scheme_theme_color="@color/white"
             app:select_mode="single_mode"
             app:selected_text_color="@color/white"