Przeglądaj źródła

修改学生端的课表页面

Pq 2 lat temu
rodzic
commit
24a740dcc9

+ 179 - 0
student/src/main/java/com/cooleshow/student/widgets/SimpleMonthView.java

@@ -0,0 +1,179 @@
+package com.cooleshow.student.widgets;
+
+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.student.R;
+import com.haibin.calendarview.Calendar;
+import com.haibin.calendarview.MonthView;
+
+/**
+ * 默认日历
+ * Created by huanghaibin on 2017/11/15.
+ */
+
+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);
+        this.context = context;
+        //兼容硬件加速无效的代码
+        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));
+//
+//        mPaint.setColor(0xFF01C1B5);
+//        mPaint.setAntiAlias(true);
+//        mPaint.setStrokeWidth(dipToPx(context,1));
+//        mPaint.setFakeBoldText(true);
+//        mPaint.setStyle(Paint.Style.STROKE);
+    }
+
+    @Override
+    protected void onPreviewHook() {
+//        mRadius = Math.min(mItemWidth, mItemHeight) / 2;
+        mRadius = SizeUtils.dp2px(2);
+        mSchemePaint.setStyle(Paint.Style.STROKE);
+    }
+
+    @Override
+    protected void onLoopStart(int x, int y) {
+
+    }
+
+    /**
+     * 绘制选中的日子
+     *
+     * @param canvas    canvas
+     * @param calendar  日历日历calendar
+     * @param x         日历Card x起点坐标
+     * @param y         日历Card y起点坐标
+     * @param hasScheme hasScheme 非标记的日期
+     * @return 返回true 则会继续绘制onDrawScheme,因为这里背景色不是是互斥的,所以返回true,返回false,则点击scheme标记的日子,则不继续绘制onDrawScheme,自行选择即可
+     */
+    @Override
+    protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
+        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;
+    }
+
+    /**
+     * 绘制标记的事件日子
+     *
+     * @param canvas   canvas
+     * @param calendar 日历calendar
+     * @param x        日历Card x起点坐标
+     * @param y        日历Card y起点坐标
+     */
+
+    @Override
+    protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y) {
+        RectF rect = buildRect(x, y);
+        canvas.drawRoundRect(rect, mRadius, mRadius, schemeBgPaint);
+    }
+
+    /**
+     * 绘制文本
+     *
+     * @param canvas     canvas
+     * @param calendar   日历calendar
+     * @param x          日历Card x起点坐标
+     * @param y          日历Card y起点坐标
+     * @param hasScheme  是否是标记的日期
+     * @param isSelected 是否选中
+     */
+
+    @Override
+    protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
+        float baselineY = mTextBaseLine + y;
+        int cx = x + mItemWidth / 2;
+        int cy = y + mItemHeight / 2;
+
+        if (isSelected) {//优先绘制选择的
+            canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()),
+                    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,
+                    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));
+        }
+
+    }
+
+    private Paint getPaint(Calendar calendar) {
+        if (calendar.isCurrentDay()) {
+            //当前日期
+            return mCurDayTextPaint;
+        }
+        if (calendar.isWeekend()) {
+            return mCurDayTextPaint;
+        }
+        if (calendar.isCurrentMonth()) {
+            return mCurMonthTextPaint;
+        }
+        return mOtherMonthTextPaint;
+    }
+
+    /**
+     * dp转px
+     *
+     * @param context context
+     * @param dpValue dp
+     * @return px
+     */
+    private static int dipToPx(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+}

+ 145 - 0
student/src/main/java/com/cooleshow/student/widgets/SimpleWeekView.java

@@ -0,0 +1,145 @@
+package com.cooleshow.student.widgets;
+
+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.student.R;
+import com.haibin.calendarview.Calendar;
+import com.haibin.calendarview.WeekView;
+
+/**
+ * 简单周视图
+ * Created by huanghaibin on 2017/11/29.
+ */
+
+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);
+//        mPaint.setAntiAlias(true);
+//        mPaint.setStrokeWidth(dipToPx(context, 1));
+//        mPaint.setFakeBoldText(true);
+//        mPaint.setStyle(Paint.Style.STROKE);
+    }
+
+    @Override
+    protected void onPreviewHook() {
+        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;
+        RectF rect = buildRect(x, 0);
+        canvas.drawRoundRect(rect, mRadius, mRadius, mSelectedPaint);
+        return false;
+    }
+
+    @Override
+    protected void onDrawScheme(Canvas canvas, Calendar calendar, int x) {
+        RectF rect = buildRect(x, 0);
+        canvas.drawRoundRect(rect, mRadius, mRadius, schemeBgPaint);
+    }
+
+    @Override
+    protected void onDrawText(Canvas canvas, Calendar calendar, int x, boolean hasScheme, boolean isSelected) {
+        float baselineY = mTextBaseLine;
+        int cx = x + mItemWidth / 2;
+        int cy = mItemHeight / 2;
+
+        if (isSelected) {
+            canvas.drawText(calendar.isCurrentDay() ? "今" : String.valueOf(calendar.getDay()),
+                    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,
+                    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);
+        }
+
+    }
+
+    private Paint getPaint(Calendar calendar) {
+        if (calendar.isCurrentDay()) {
+            //当前日期
+            return mCurDayTextPaint;
+        }
+        if (calendar.isWeekend()) {
+            return mCurDayTextPaint;
+        }
+        if (calendar.isCurrentMonth()) {
+            return mCurMonthTextPaint;
+        }
+        return mOtherMonthTextPaint;
+    }
+
+    /**
+     * dp转px
+     *
+     * @param context context
+     * @param dpValue dp
+     * @return px
+     */
+    private static int dipToPx(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+}

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

@@ -78,7 +78,7 @@
             app:layout_constraintTop_toTopOf="parent"
             app:max_year="2100"
             app:min_year="1990"
-            app:month_view="com.cooleshow.teacher.widgets.SimpleMonthView"
+            app:month_view="com.cooleshow.student.widgets.SimpleMonthView"
             app:month_view_show_mode="mode_only_current"
             app:scheme_text_color="@color/color_ff6363"
             app:scheme_theme_color="@color/white"
@@ -90,7 +90,7 @@
             app:week_start_with="sun"
             app:week_text_color="@color/gray_777"
             app:week_text_size="@dimen/dp_16"
-            app:week_view="com.cooleshow.teacher.widgets.SimpleWeekView" />
+            app:week_view="com.cooleshow.student.widgets.SimpleWeekView" />
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/recyclerView"