Browse Source

写课表页面

Pq 3 years ago
parent
commit
c869b61c50
25 changed files with 1234 additions and 25 deletions
  1. 4 0
      BaseLibrary/build.gradle
  2. 12 1
      BaseLibrary/proguard-rules.pro
  3. 28 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/MyCalenderView.java
  4. 7 0
      BaseLibrary/src/main/res/values/colors.xml
  5. 378 0
      BaseLibrary/src/main/res/values/dimens.xml
  6. 8 1
      build.gradle
  7. 18 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/CourseTableListAdapter.kt
  8. 7 0
      teacher/src/main/java/com/cooleshow/teacher/bean/CourseTableListBean.java
  9. 162 0
      teacher/src/main/java/com/cooleshow/teacher/ui/main/CourseTableFragment.kt
  10. 34 2
      teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java
  11. 65 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/CalendarExpandDecoration.java
  12. 65 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/CalendarShrinkDecoration.java
  13. 46 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/CourseTableArrowView.java
  14. 151 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleMonthView.java
  15. 100 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleWeekView.java
  16. BIN
      teacher/src/main/res/drawable-xhdpi/icon_arrow_down.png
  17. BIN
      teacher/src/main/res/drawable-xxhdpi/ic_calendar_expand.png
  18. BIN
      teacher/src/main/res/drawable-xxhdpi/ic_calendar_shrink.png
  19. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_arrow_down.png
  20. 1 1
      teacher/src/main/res/layout/activity_main.xml
  21. 103 0
      teacher/src/main/res/layout/fragment_course_table_layout.xml
  22. 11 0
      teacher/src/main/res/layout/item_course_table_layout.xml
  23. 13 0
      teacher/src/main/res/layout/view_course_table_arrow_layout.xml
  24. 13 12
      teacher/src/main/res/values/themes.xml
  25. 8 8
      usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/LoginActivity.kt

+ 4 - 0
BaseLibrary/build.gradle

@@ -107,4 +107,8 @@ dependencies {
     api "com.alibaba:arouter-api:$arouter_api_version"
     kapt "com.alibaba:arouter-compiler:$arouter_api_version"
 
+    api "com.haibin:calendarview:3.7.1"
+
+    api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.7'
+
 }

+ 12 - 1
BaseLibrary/proguard-rules.pro

@@ -18,4 +18,15 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context);
+}
+-keep class com.chad.library.adapter.** {
+*;
+}
+-keep public class * extends com.chad.library.adapter.base.BaseQuickAdapter
+-keep public class * extends com.chad.library.adapter.base.BaseViewHolder
+-keepclassmembers  class **$** extends com.chad.library.adapter.base.BaseViewHolder {
+     <init>(...);
+}

+ 28 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/MyCalenderView.java

@@ -0,0 +1,28 @@
+package com.cooleshow.base.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.haibin.calendarview.CalendarView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Description:
+ * Copyright  : Copyright (c) 2019
+ * Company    : 大雅乐盟
+ * Author     : r
+ * Date       : 2019/12/11 11:25
+ */
+public class MyCalenderView extends CalendarView {
+    public MyCalenderView(@NonNull Context context) {
+        super(context);
+    }
+
+    public MyCalenderView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+
+}

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

@@ -15,6 +15,9 @@
     <color name="common_red">#f11919</color>
     <color name="common_white">#ffffff</color>
     <color name="common_yellow">#fe9c2f</color>
+    <color name="gray_AA">#AAAAAA</color>
+    <color name="black_444">#ff444444</color>
+    <color name="gray_777">#777777</color>E
 
     <color name="text_dark">#999999</color>
     <color name="text_light_dark">#333333</color>
@@ -22,11 +25,15 @@
     <color name="transparent">#00000000</color>
 
     <color name="divide_color">#FFEBEBEB</color>
+    <color name="divide_color2">#FFF2F2F2</color>
     <color name="color_ff2dc7aa">#FF2DC7AA</color>
     <color name="color_fff5f7fb">#FFF5F7FB</color>
     <color name="color_ffc1c1c1">#FFC1C1C1</color>
     <color name="color_999999">#999999</color>
+    <color name="color_333333">#333333</color>
     <color name="color_2dc7aa">#2DC7AA</color>
     <color name="color_283240">#283240</color>
     <color name="color_808492">#808492</color>
+    <color name="color_f8f9fc">#f8f9fc</color>
+    <color name="color_f2f2f2">#F2F2F2</color>
 </resources>

+ 378 - 0
BaseLibrary/src/main/res/values/dimens.xml

@@ -20,6 +20,384 @@
     <dimen name="text_big_size">16sp</dimen>
     <dimen name="text_large_size">18sp</dimen>
 
+    <dimen name="dp_0">0dp</dimen>
+    <dimen name="dp_0_1">0.1dp</dimen>
+    <dimen name="dp_0_5">0.5dp</dimen>
+    <dimen name="dp_1">1dp</dimen>
+    <dimen name="dp_1_5">1.5dp</dimen>
+    <dimen name="dp_2">2dp</dimen>
+    <dimen name="dp_2_5">2.5dp</dimen>
+    <dimen name="dp_3">3dp</dimen>
+    <dimen name="dp_3_5">3.5dp</dimen>
+    <dimen name="dp_4">4dp</dimen>
+    <dimen name="dp_4_5">4.5dp</dimen>
+    <dimen name="dp_5">5dp</dimen>
+    <dimen name="dp_6">6dp</dimen>
+    <dimen name="dp_7">7dp</dimen>
+    <dimen name="dp_8">8dp</dimen>
+    <dimen name="dp_9">9dp</dimen>
+    <dimen name="dp_10">10dp</dimen>
+    <dimen name="dp_11">11dp</dimen>
+    <dimen name="dp_12">12dp</dimen>
+    <dimen name="dp_13">13dp</dimen>
+    <dimen name="dp_14">14dp</dimen>
+    <dimen name="dp_15">15dp</dimen>
+    <dimen name="dp_16">16dp</dimen>
+    <dimen name="dp_17">17dp</dimen>
+    <dimen name="dp_18">18dp</dimen>
+    <dimen name="dp_19">19dp</dimen>
+    <dimen name="dp_20">20dp</dimen>
+    <dimen name="dp_21">21dp</dimen>
+    <dimen name="dp_22">22dp</dimen>
+    <dimen name="dp_23">23dp</dimen>
+    <dimen name="dp_24">24dp</dimen>
+    <dimen name="dp_25">25dp</dimen>
+    <dimen name="dp_26">26dp</dimen>
+    <dimen name="dp_27">27dp</dimen>
+    <dimen name="dp_28">28dp</dimen>
+    <dimen name="dp_29">29dp</dimen>
+    <dimen name="dp_30">30dp</dimen>
+    <dimen name="dp_31">31dp</dimen>
+    <dimen name="dp_32">32dp</dimen>
+    <dimen name="dp_33">33dp</dimen>
+    <dimen name="dp_34">34dp</dimen>
+    <dimen name="dp_35">35dp</dimen>
+    <dimen name="dp_36">36dp</dimen>
+    <dimen name="dp_37">37dp</dimen>
+    <dimen name="dp_38">38dp</dimen>
+    <dimen name="dp_39">39dp</dimen>
+    <dimen name="dp_40">40dp</dimen>
+    <dimen name="dp_41">41dp</dimen>
+    <dimen name="dp_42">42dp</dimen>
+    <dimen name="dp_43">43dp</dimen>
+    <dimen name="dp_44">44dp</dimen>
+    <dimen name="dp_45">45dp</dimen>
+    <dimen name="dp_46">46dp</dimen>
+    <dimen name="dp_47">47dp</dimen>
+    <dimen name="dp_48">48dp</dimen>
+    <dimen name="dp_49">49dp</dimen>
+    <dimen name="dp_50">50dp</dimen>
+    <dimen name="dp_51">51dp</dimen>
+    <dimen name="dp_52">52dp</dimen>
+    <dimen name="dp_53">53dp</dimen>
+    <dimen name="dp_54">54dp</dimen>
+    <dimen name="dp_55">55dp</dimen>
+    <dimen name="dp_56">56dp</dimen>
+    <dimen name="dp_57">57dp</dimen>
+    <dimen name="dp_58">58dp</dimen>
+    <dimen name="dp_59">59dp</dimen>
+    <dimen name="dp_60">60dp</dimen>
+    <dimen name="dp_61">61dp</dimen>
+    <dimen name="dp_62">62dp</dimen>
+    <dimen name="dp_63">63dp</dimen>
+    <dimen name="dp_64">64dp</dimen>
+    <dimen name="dp_65">65dp</dimen>
+    <dimen name="dp_66">66dp</dimen>
+    <dimen name="dp_67">67dp</dimen>
+    <dimen name="dp_68">68dp</dimen>
+    <dimen name="dp_69">69dp</dimen>
+    <dimen name="dp_70">70dp</dimen>
+    <dimen name="dp_71">71dp</dimen>
+    <dimen name="dp_72">72dp</dimen>
+    <dimen name="dp_73">73dp</dimen>
+    <dimen name="dp_74">74dp</dimen>
+    <dimen name="dp_75">75dp</dimen>
+    <dimen name="dp_76">76dp</dimen>
+    <dimen name="dp_77">77dp</dimen>
+    <dimen name="dp_78">78dp</dimen>
+    <dimen name="dp_79">79dp</dimen>
+    <dimen name="dp_80">80dp</dimen>
+    <dimen name="dp_81">81dp</dimen>
+    <dimen name="dp_82">82dp</dimen>
+    <dimen name="dp_83">83dp</dimen>
+    <dimen name="dp_84">84dp</dimen>
+    <dimen name="dp_85">85dp</dimen>
+    <dimen name="dp_86">86dp</dimen>
+    <dimen name="dp_87">87dp</dimen>
+    <dimen name="dp_88">88dp</dimen>
+    <dimen name="dp_89">89dp</dimen>
+    <dimen name="dp_90">90dp</dimen>
+    <dimen name="dp_91">91dp</dimen>
+    <dimen name="dp_92">92dp</dimen>
+    <dimen name="dp_93">93dp</dimen>
+    <dimen name="dp_94">94dp</dimen>
+    <dimen name="dp_95">95dp</dimen>
+    <dimen name="dp_96">96dp</dimen>
+    <dimen name="dp_97">97dp</dimen>
+    <dimen name="dp_98">98dp</dimen>
+    <dimen name="dp_99">99dp</dimen>
+    <dimen name="dp_100">100dp</dimen>
+    <dimen name="dp_101">101dp</dimen>
+    <dimen name="dp_102">102dp</dimen>
+    <dimen name="dp_103">103dp</dimen>
+    <dimen name="dp_104">104dp</dimen>
+    <dimen name="dp_105">105dp</dimen>
+    <dimen name="dp_106">106dp</dimen>
+    <dimen name="dp_107">107dp</dimen>
+    <dimen name="dp_108">108dp</dimen>
+    <dimen name="dp_109">109dp</dimen>
+    <dimen name="dp_110">110dp</dimen>
+    <dimen name="dp_111">111dp</dimen>
+    <dimen name="dp_112">112dp</dimen>
+    <dimen name="dp_113">113dp</dimen>
+    <dimen name="dp_114">114dp</dimen>
+    <dimen name="dp_115">115dp</dimen>
+    <dimen name="dp_116">116dp</dimen>
+    <dimen name="dp_117">117dp</dimen>
+    <dimen name="dp_118">118dp</dimen>
+    <dimen name="dp_119">119dp</dimen>
+    <dimen name="dp_120">120dp</dimen>
+    <dimen name="dp_121">121dp</dimen>
+    <dimen name="dp_122">122dp</dimen>
+    <dimen name="dp_123">123dp</dimen>
+    <dimen name="dp_124">124dp</dimen>
+    <dimen name="dp_125">125dp</dimen>
+    <dimen name="dp_126">126dp</dimen>
+    <dimen name="dp_127">127dp</dimen>
+    <dimen name="dp_128">128dp</dimen>
+    <dimen name="dp_129">129dp</dimen>
+    <dimen name="dp_130">130dp</dimen>
+    <dimen name="dp_131">131dp</dimen>
+    <dimen name="dp_132">132dp</dimen>
+    <dimen name="dp_133">133dp</dimen>
+    <dimen name="dp_134">134dp</dimen>
+    <dimen name="dp_135">135dp</dimen>
+    <dimen name="dp_136">136dp</dimen>
+    <dimen name="dp_137">137dp</dimen>
+    <dimen name="dp_138">138dp</dimen>
+    <dimen name="dp_139">139dp</dimen>
+    <dimen name="dp_140">140dp</dimen>
+    <dimen name="dp_141">141dp</dimen>
+    <dimen name="dp_142">142dp</dimen>
+    <dimen name="dp_143">143dp</dimen>
+    <dimen name="dp_144">144dp</dimen>
+    <dimen name="dp_145">145dp</dimen>
+    <dimen name="dp_146">146dp</dimen>
+    <dimen name="dp_147">147dp</dimen>
+    <dimen name="dp_148">148dp</dimen>
+    <dimen name="dp_149">149dp</dimen>
+    <dimen name="dp_150">150dp</dimen>
+    <dimen name="dp_151">151dp</dimen>
+    <dimen name="dp_152">152dp</dimen>
+    <dimen name="dp_153">153dp</dimen>
+    <dimen name="dp_154">154dp</dimen>
+    <dimen name="dp_155">155dp</dimen>
+    <dimen name="dp_156">156dp</dimen>
+    <dimen name="dp_157">157dp</dimen>
+    <dimen name="dp_158">158dp</dimen>
+    <dimen name="dp_159">159dp</dimen>
+    <dimen name="dp_160">160dp</dimen>
+    <dimen name="dp_161">161dp</dimen>
+    <dimen name="dp_162">162dp</dimen>
+    <dimen name="dp_163">163dp</dimen>
+    <dimen name="dp_164">164dp</dimen>
+    <dimen name="dp_165">165dp</dimen>
+    <dimen name="dp_166">166dp</dimen>
+    <dimen name="dp_167">167dp</dimen>
+    <dimen name="dp_168">168dp</dimen>
+    <dimen name="dp_169">169dp</dimen>
+    <dimen name="dp_170">170dp</dimen>
+    <dimen name="dp_171">171dp</dimen>
+    <dimen name="dp_172">172dp</dimen>
+    <dimen name="dp_173">173dp</dimen>
+    <dimen name="dp_174">174dp</dimen>
+    <dimen name="dp_175">175dp</dimen>
+    <dimen name="dp_176">176dp</dimen>
+    <dimen name="dp_177">177dp</dimen>
+    <dimen name="dp_178">178dp</dimen>
+    <dimen name="dp_179">179dp</dimen>
+    <dimen name="dp_180">180dp</dimen>
+    <dimen name="dp_181">181dp</dimen>
+    <dimen name="dp_182">182dp</dimen>
+    <dimen name="dp_183">183dp</dimen>
+    <dimen name="dp_184">184dp</dimen>
+    <dimen name="dp_185">185dp</dimen>
+    <dimen name="dp_186">186dp</dimen>
+    <dimen name="dp_187">187dp</dimen>
+    <dimen name="dp_188">188dp</dimen>
+    <dimen name="dp_189">189dp</dimen>
+    <dimen name="dp_190">190dp</dimen>
+    <dimen name="dp_191">191dp</dimen>
+    <dimen name="dp_192">192dp</dimen>
+    <dimen name="dp_193">193dp</dimen>
+    <dimen name="dp_194">194dp</dimen>
+    <dimen name="dp_195">195dp</dimen>
+    <dimen name="dp_196">196dp</dimen>
+    <dimen name="dp_197">197dp</dimen>
+    <dimen name="dp_198">198dp</dimen>
+    <dimen name="dp_199">199dp</dimen>
+    <dimen name="dp_200">200dp</dimen>
+    <dimen name="dp_201">201dp</dimen>
+    <dimen name="dp_202">202dp</dimen>
+    <dimen name="dp_203">203dp</dimen>
+    <dimen name="dp_204">204dp</dimen>
+    <dimen name="dp_205">205dp</dimen>
+    <dimen name="dp_206">206dp</dimen>
+    <dimen name="dp_207">207dp</dimen>
+    <dimen name="dp_208">208dp</dimen>
+    <dimen name="dp_209">209dp</dimen>
+    <dimen name="dp_210">210dp</dimen>
+    <dimen name="dp_211">211dp</dimen>
+    <dimen name="dp_212">212dp</dimen>
+    <dimen name="dp_213">213dp</dimen>
+    <dimen name="dp_214">214dp</dimen>
+    <dimen name="dp_215">215dp</dimen>
+    <dimen name="dp_216">216dp</dimen>
+    <dimen name="dp_217">217dp</dimen>
+    <dimen name="dp_218">218dp</dimen>
+    <dimen name="dp_219">219dp</dimen>
+    <dimen name="dp_220">220dp</dimen>
+    <dimen name="dp_221">221dp</dimen>
+    <dimen name="dp_222">222dp</dimen>
+    <dimen name="dp_223">223dp</dimen>
+    <dimen name="dp_224">224dp</dimen>
+    <dimen name="dp_225">225dp</dimen>
+    <dimen name="dp_226">226dp</dimen>
+    <dimen name="dp_227">227dp</dimen>
+    <dimen name="dp_228">228dp</dimen>
+    <dimen name="dp_229">229dp</dimen>
+    <dimen name="dp_230">230dp</dimen>
+    <dimen name="dp_231">231dp</dimen>
+    <dimen name="dp_232">232dp</dimen>
+    <dimen name="dp_233">233dp</dimen>
+    <dimen name="dp_234">234dp</dimen>
+    <dimen name="dp_235">235dp</dimen>
+    <dimen name="dp_236">236dp</dimen>
+    <dimen name="dp_237">237dp</dimen>
+    <dimen name="dp_238">238dp</dimen>
+    <dimen name="dp_239">239dp</dimen>
+    <dimen name="dp_240">240dp</dimen>
+    <dimen name="dp_241">241dp</dimen>
+    <dimen name="dp_242">242dp</dimen>
+    <dimen name="dp_243">243dp</dimen>
+    <dimen name="dp_244">244dp</dimen>
+    <dimen name="dp_245">245dp</dimen>
+    <dimen name="dp_246">246dp</dimen>
+    <dimen name="dp_247">247dp</dimen>
+    <dimen name="dp_248">248dp</dimen>
+    <dimen name="dp_249">249dp</dimen>
+    <dimen name="dp_250">250dp</dimen>
+    <dimen name="dp_251">251dp</dimen>
+    <dimen name="dp_252">252dp</dimen>
+    <dimen name="dp_253">253dp</dimen>
+    <dimen name="dp_254">254dp</dimen>
+    <dimen name="dp_255">255dp</dimen>
+    <dimen name="dp_256">256dp</dimen>
+    <dimen name="dp_257">257dp</dimen>
+    <dimen name="dp_258">258dp</dimen>
+    <dimen name="dp_259">259dp</dimen>
+    <dimen name="dp_260">260dp</dimen>
+    <dimen name="dp_261">261dp</dimen>
+    <dimen name="dp_262">262dp</dimen>
+    <dimen name="dp_263">263dp</dimen>
+    <dimen name="dp_264">264dp</dimen>
+    <dimen name="dp_265">265dp</dimen>
+    <dimen name="dp_266">266dp</dimen>
+    <dimen name="dp_267">267dp</dimen>
+    <dimen name="dp_268">268dp</dimen>
+    <dimen name="dp_269">269dp</dimen>
+    <dimen name="dp_270">270dp</dimen>
+    <dimen name="dp_271">271dp</dimen>
+    <dimen name="dp_272">272dp</dimen>
+    <dimen name="dp_273">273dp</dimen>
+    <dimen name="dp_274">274dp</dimen>
+    <dimen name="dp_275">275dp</dimen>
+    <dimen name="dp_276">276dp</dimen>
+    <dimen name="dp_277">277dp</dimen>
+    <dimen name="dp_278">278dp</dimen>
+    <dimen name="dp_279">279dp</dimen>
+    <dimen name="dp_280">280dp</dimen>
+    <dimen name="dp_281">281dp</dimen>
+    <dimen name="dp_282">282dp</dimen>
+    <dimen name="dp_283">283dp</dimen>
+    <dimen name="dp_284">284dp</dimen>
+    <dimen name="dp_285">285dp</dimen>
+    <dimen name="dp_286">286dp</dimen>
+    <dimen name="dp_287">287dp</dimen>
+    <dimen name="dp_288">288dp</dimen>
+    <dimen name="dp_289">289dp</dimen>
+    <dimen name="dp_290">290dp</dimen>
+    <dimen name="dp_291">291dp</dimen>
+    <dimen name="dp_292">292dp</dimen>
+    <dimen name="dp_293">293dp</dimen>
+    <dimen name="dp_294">294dp</dimen>
+    <dimen name="dp_295">295dp</dimen>
+    <dimen name="dp_296">296dp</dimen>
+    <dimen name="dp_297">297dp</dimen>
+    <dimen name="dp_298">298dp</dimen>
+    <dimen name="dp_299">299dp</dimen>
+    <dimen name="dp_300">300dp</dimen>
+    <dimen name="dp_301">301dp</dimen>
+    <dimen name="dp_302">302dp</dimen>
+    <dimen name="dp_303">303dp</dimen>
+    <dimen name="dp_304">304dp</dimen>
+    <dimen name="dp_305">305dp</dimen>
+    <dimen name="dp_306">306dp</dimen>
+    <dimen name="dp_307">307dp</dimen>
+    <dimen name="dp_308">308dp</dimen>
+    <dimen name="dp_309">309dp</dimen>
+    <dimen name="dp_310">310dp</dimen>
+    <dimen name="dp_311">311dp</dimen>
+    <dimen name="dp_312">312dp</dimen>
+    <dimen name="dp_313">313dp</dimen>
+    <dimen name="dp_314">314dp</dimen>
+    <dimen name="dp_315">315dp</dimen>
+    <dimen name="dp_316">316dp</dimen>
+    <dimen name="dp_317">317dp</dimen>
+    <dimen name="dp_318">318dp</dimen>
+    <dimen name="dp_319">319dp</dimen>
+    <dimen name="dp_320">320dp</dimen>
+    <dimen name="dp_321">321dp</dimen>
+    <dimen name="dp_322">322dp</dimen>
+    <dimen name="dp_323">323dp</dimen>
+    <dimen name="dp_324">324dp</dimen>
+    <dimen name="dp_325">325dp</dimen>
+    <dimen name="dp_326">326dp</dimen>
+    <dimen name="dp_327">327dp</dimen>
+    <dimen name="dp_328">328dp</dimen>
+    <dimen name="dp_329">329dp</dimen>
+    <dimen name="dp_330">330dp</dimen>
+    <dimen name="dp_331">331dp</dimen>
+    <dimen name="dp_332">332dp</dimen>
+    <dimen name="dp_333">333dp</dimen>
+    <dimen name="dp_334">334dp</dimen>
+    <dimen name="dp_335">335dp</dimen>
+    <dimen name="dp_336">336dp</dimen>
+    <dimen name="dp_337">337dp</dimen>
+    <dimen name="dp_338">338dp</dimen>
+    <dimen name="dp_339">339dp</dimen>
+    <dimen name="dp_340">340dp</dimen>
+    <dimen name="dp_341">341dp</dimen>
+    <dimen name="dp_342">342dp</dimen>
+    <dimen name="dp_343">343dp</dimen>
+    <dimen name="dp_344">344dp</dimen>
+    <dimen name="dp_345">345dp</dimen>
+    <dimen name="dp_346">346dp</dimen>
+    <dimen name="dp_347">347dp</dimen>
+    <dimen name="dp_348">348dp</dimen>
+    <dimen name="dp_349">349dp</dimen>
+    <dimen name="dp_350">350dp</dimen>
+    <dimen name="dp_351">351dp</dimen>
+    <dimen name="dp_352">352dp</dimen>
+    <dimen name="dp_353">353dp</dimen>
+    <dimen name="dp_354">354dp</dimen>
+    <dimen name="dp_355">355dp</dimen>
+    <dimen name="dp_356">356dp</dimen>
+    <dimen name="dp_357">357dp</dimen>
+    <dimen name="dp_358">358dp</dimen>
+    <dimen name="dp_359">359dp</dimen>
+    <dimen name="dp_360">360dp</dimen>
+    <dimen name="dp_365">365dp</dimen>
+    <dimen name="dp_370">370dp</dimen>
+    <dimen name="dp_400">400dp</dimen>
+    <dimen name="dp_410">410dp</dimen>
+    <dimen name="dp_422">422dp</dimen>
+    <dimen name="dp_472">472dp</dimen>
+    <dimen name="dp_500">500dp</dimen>
+    <dimen name="dp_600">600dp</dimen>
+    <dimen name="dp_640">640dp</dimen>
+    <dimen name="dp_720">720dp</dimen>
+
     <dimen name="sp_6">6sp</dimen>
     <dimen name="sp_7">7sp</dimen>
     <dimen name="sp_8">8sp</dimen>

+ 8 - 1
build.gradle

@@ -26,10 +26,13 @@ buildscript {
         mavenCentral()
 
         maven { url 'https://jitpack.io' }
+        maven {
+            url "https://maven.aliyun.com/nexus/content/repositories/releases"
+        }
 //        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
 //        maven { url 'https://maven.aliyun.com/repository/public/' }
 //        maven { url 'https://maven.aliyun.com/repository/google/' }
-//        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
+        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
 //        maven { url 'https://maven.aliyun.com/repository/central/' }
 
     }
@@ -45,6 +48,10 @@ allprojects {
         google()
         mavenCentral()
         maven { url 'https://jitpack.io' }
+        maven {
+            url "https://maven.aliyun.com/nexus/content/repositories/releases"
+        }
+        maven { url 'https://maven.aliyun.com/repository/jcenter/' }
     }
 }
 

+ 18 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/CourseTableListAdapter.kt

@@ -0,0 +1,18 @@
+package com.cooleshow.teacher.adapter
+
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.cooleshow.teacher.bean.CourseTableListBean
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import android.widget.TextView
+import com.cooleshow.teacher.R
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+class CourseTableListAdapter(layoutResId: Int) :
+    BaseQuickAdapter<CourseTableListBean?, BaseViewHolder>(layoutResId) {
+    override fun convert(baseViewHolder: BaseViewHolder, o: CourseTableListBean?) {
+        val text = baseViewHolder.getView<TextView>(R.id.text)
+        text.text = "position:" + baseViewHolder.layoutPosition
+    }
+}

+ 7 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/CourseTableListBean.java

@@ -0,0 +1,7 @@
+package com.cooleshow.teacher.bean;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public class CourseTableListBean {
+}

+ 162 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/main/CourseTableFragment.kt

@@ -0,0 +1,162 @@
+package com.cooleshow.teacher.ui.main
+
+import android.view.MotionEvent
+import android.view.View
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.chad.library.adapter.base.listener.OnItemChildClickListener
+import com.chad.library.adapter.base.listener.OnItemClickListener
+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.R
+import com.cooleshow.teacher.adapter.CourseTableListAdapter
+import com.cooleshow.teacher.bean.CourseTableListBean
+import com.cooleshow.teacher.contract.HomeContract
+import com.cooleshow.teacher.databinding.FragmentCourseTableLayoutBinding
+import com.cooleshow.teacher.presenter.main.HomePresenter
+import com.cooleshow.teacher.widgets.CalendarExpandDecoration
+import com.cooleshow.teacher.widgets.CalendarShrinkDecoration
+import com.cooleshow.teacher.widgets.CourseTableArrowView
+import com.haibin.calendarview.CalendarView
+import kotlinx.android.synthetic.main.fragment_course_table_layout.*
+import java.util.*
+
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+class CourseTableFragment : BaseMVPFragment<FragmentCourseTableLayoutBinding, HomePresenter>(),
+    HomeContract.HomeView, CalendarView.OnCalendarSelectListener,
+    CalendarView.OnCalendarInterceptListener, CalendarView.OnMonthChangeListener,
+    CalendarView.OnViewChangeListener {
+    private lateinit var date: Date
+    private lateinit var calendarDate: String
+    private lateinit var calendarExpandDecoration: CalendarExpandDecoration
+    private lateinit var calendarShrinkDecoration: CalendarShrinkDecoration
+    private lateinit var adapter: CourseTableListAdapter
+
+    override fun getLayoutView(): FragmentCourseTableLayoutBinding {
+        return FragmentCourseTableLayoutBinding.inflate(layoutInflater)
+    }
+
+    override fun initView(rootView: View?) {
+        mViewBinding.calendarView.setOnCalendarSelectListener(this)
+        mViewBinding.calendarView.setOnCalendarInterceptListener(this)
+        mViewBinding.calendarView.setOnMonthChangeListener(this)
+        mViewBinding.calendarView.setOnViewChangeListener(this)
+        calendarExpandDecoration = CalendarExpandDecoration(context)
+        calendarShrinkDecoration = CalendarShrinkDecoration(context)
+        val layoutManager = LinearLayoutManager(
+            activity
+        )
+        mViewBinding.recyclerView.layoutManager = layoutManager
+        mViewBinding.recyclerView.addItemDecoration(calendarShrinkDecoration, 0)
+        adapter = CourseTableListAdapter(R.layout.item_course_table_layout);
+
+        mViewBinding.recyclerView.adapter = adapter
+        mViewBinding.recyclerView.addOnItemTouchListener(object :
+            RecyclerView.SimpleOnItemTouchListener() {
+            var y = 0f
+            override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
+                when (e.action) {
+                    MotionEvent.ACTION_DOWN -> y = e.y
+                    MotionEvent.ACTION_UP -> {
+                        val right: Int = rv.width / 2 - SizeUtils.dp2px(16f)
+                        val left: Int = rv.width / 2 + SizeUtils.dp2px(16f)
+                        if (right < e.x && e.x < left && e.y < SizeUtils.dp2px(30f) && y < SizeUtils.dp2px(30f)) {
+                            if (mViewBinding.calendarLayout.isExpand) {
+                                mViewBinding.calendarLayout.shrink()
+                            } else {
+                                mViewBinding.calendarLayout.expand()
+                            }
+                            return true
+                        }
+                    }
+                }
+                return super.onInterceptTouchEvent(rv, e)
+            }
+        })
+        adapter.setOnItemClickListener(OnItemClickListener() { adapter, view, position ->
+            ToastUtils.showShort("点击position:" + position)
+        })
+        addTestData()
+    }
+
+    private fun addTestData() {
+        var list = mutableListOf<CourseTableListBean?>()
+        for (i in 0 until 20) {
+            list.add(CourseTableListBean())
+        }
+        adapter.setNewInstance(list)
+    }
+
+    override fun initData() {
+        lazyLoad()
+    }
+
+    private fun lazyLoad() {
+        val calendar = Calendar.getInstance()
+        val year = calendar[Calendar.YEAR]
+        val month = calendar[Calendar.MONTH] + 1
+        val day = calendar[Calendar.DAY_OF_MONTH]
+        var mCalendarView = mViewBinding.calendarView;
+        if ((mViewBinding.calendarView.getCurDay() !== day || mViewBinding.calendarView.getCurMonth() !== month || mViewBinding.calendarView.getCurYear() !== year)) {
+            mCalendarView.updateCurrentDate()
+            mCalendarView.clearSingleSelect()
+            setMontAndDay(year, month, day)
+            date = TimeUtils.getNowDate()
+            calendarDate = TimeUtils.getNowString()
+        }
+//        presenter.getCourseScheduleDateByMonth(calendarDate, false)
+//        presenter.getCourseSchedulesWithDate(date, false)
+    }
+
+    private fun setMontAndDay(year: Int, month: Int, day: Int) {
+        var span: String = if (month < 10) {
+            year.toString() + "年0" + month + "月"
+        } else {
+            year.toString() + "年" + month + "月"
+        }
+        mViewBinding.tvCurrentDate.text = span
+    }
+
+    override fun createPresenter(): HomePresenter {
+        return HomePresenter()
+    }
+
+    override fun onCalendarOutOfRange(calendar: com.haibin.calendarview.Calendar?) {
+    }
+
+    override fun onCalendarSelect(calendar: com.haibin.calendarview.Calendar?, isClick: Boolean) {
+    }
+
+    override fun onCalendarIntercept(calendar: com.haibin.calendarview.Calendar?): Boolean {
+        return false;
+    }
+
+    override fun onCalendarInterceptClick(
+        calendar: com.haibin.calendarview.Calendar?,
+        isClick: Boolean
+    ) {
+    }
+
+    override fun onMonthChange(year: Int, month: Int) {
+    }
+
+    override fun onViewChange(isMonthView: Boolean) {
+        if (!isMonthView) {
+            recyclerView.removeItemDecoration(calendarExpandDecoration)
+            if (recyclerView.itemDecorationCount == 0 || recyclerView.getItemDecorationAt(0) !is CalendarShrinkDecoration) {
+                recyclerView.addItemDecoration(calendarShrinkDecoration, 0)
+            }
+        } else {
+            recyclerView.removeItemDecoration(calendarShrinkDecoration)
+            if (recyclerView.itemDecorationCount == 0 || recyclerView.getItemDecorationAt(0) !is CalendarExpandDecoration) {
+                recyclerView.addItemDecoration(calendarExpandDecoration, 0)
+            }
+        }
+    }
+
+}

+ 34 - 2
teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java

@@ -1,6 +1,7 @@
 package com.cooleshow.teacher.ui.main;
 
 import android.os.Bundle;
+import android.view.MenuItem;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.cooleshow.base.ui.activity.BaseActivity;
@@ -9,6 +10,7 @@ import com.cooleshow.provider.router.RouterPath;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.HomePageAdapter;
 import com.cooleshow.teacher.databinding.ActivityMainBinding;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 
 import java.util.ArrayList;
 import java.util.Objects;
@@ -42,12 +44,12 @@ public class MainActivity extends BaseActivity<ActivityMainBinding> {
     protected void initView() {
         HomePageAdapter homePageAdapter = new HomePageAdapter(this);
         HomeFragment homeFragment = new HomeFragment();
-        HomeFragment homeFragment1 = new HomeFragment();
+        CourseTableFragment courseTableFragment = new CourseTableFragment();
         HomeFragment homeFragment2 = new HomeFragment();
         HomeFragment homeFragment3 = new HomeFragment();
         HomeFragment homeFragment4 = new HomeFragment();
         mFragments.add(homeFragment);
-        mFragments.add(homeFragment1);
+        mFragments.add(courseTableFragment);
         mFragments.add(homeFragment2);
         mFragments.add(homeFragment3);
         mFragments.add(homeFragment4);
@@ -55,6 +57,36 @@ public class MainActivity extends BaseActivity<ActivityMainBinding> {
         getViewBinding().viewPager.setAdapter(homePageAdapter);
         getViewBinding().viewPager.setOffscreenPageLimit(mFragments.size());
         getViewBinding().viewPager.setUserInputEnabled(false);
+        getViewBinding().navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
+            @Override
+            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+                return onTabClick(item.getItemId());
+            }
+        });
+
+    }
+
+    private boolean onTabClick(int viewId) {
+        if (viewId == R.id.menu_home) {
+            getViewBinding().viewPager.setCurrentItem(0);
+            return true;
+        }
+        if (viewId == R.id.menu_coursetable) {
+            getViewBinding().viewPager.setCurrentItem(1);
+            return true;
+        }
+        if (viewId == R.id.menu_chat) {
+            getViewBinding().viewPager.setCurrentItem(2);
+            return true;
+        }
+        if (viewId == R.id.menu_mall) {
+            getViewBinding().viewPager.setCurrentItem(3);
+            return true;
+        }
+        if (viewId == R.id.menu_mine) {
+            getViewBinding().viewPager.setCurrentItem(4);
+        }
+        return true;
     }
 
 }

+ 65 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/CalendarExpandDecoration.java

@@ -0,0 +1,65 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+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 androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Description:
+ * Copyright  : Copyright (c) 2019
+ * Company    : 大雅乐盟
+ * Author     : r
+ * Date       : 2019/10/22 10:07
+ */
+public class CalendarExpandDecoration extends RecyclerView.ItemDecoration {
+    private int mHeight;
+    private Paint mPaint;
+    Bitmap mSrcBitmap;
+    Context context;
+
+    public CalendarExpandDecoration(Context context) {
+        this.context = context;
+        mPaint = new Paint();
+        mPaint.setStyle(Paint.Style.FILL);
+        mPaint.setColor(0xffDFDEDE);
+        mPaint.setStrokeWidth(0);
+        mPaint.setAntiAlias(true);
+        mSrcBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_calendar_expand);
+        mHeight = SizeUtils.dp2px( 38);
+    }
+
+    public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
+        super.onDrawOver(canvas, parent, state);
+        int mWidth = parent.getWidth();
+        mPaint.setStrokeWidth(1);
+        mPaint.setColor(0xffffffff);
+        canvas.drawRoundRect(new RectF(0, 0, mWidth, mHeight), 0, 0, mPaint);
+        int mBitmapHeight = mSrcBitmap.getHeight();
+        int mBitmapWidth = mSrcBitmap.getWidth();
+
+        RectF rectF = new RectF(mWidth / 2 - mBitmapWidth / 2, mHeight / 2 - mBitmapHeight / 2, mWidth / 2 + mBitmapWidth / 2, mHeight / 2 + mBitmapHeight / 2);
+        canvas.drawBitmap(mSrcBitmap, null, rectF, mPaint);
+
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+        int position = parent.getChildAdapterPosition(view);
+        if (position == 0) {
+            outRect.top = mHeight;
+        }
+    }
+
+
+}

+ 65 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/CalendarShrinkDecoration.java

@@ -0,0 +1,65 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+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 androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Description:
+ * Copyright  : Copyright (c) 2019
+ * Company    : 大雅乐盟
+ * Author     : r
+ * Date       : 2019/10/22 10:07
+ */
+public class CalendarShrinkDecoration extends RecyclerView.ItemDecoration {
+    private int mHeight;
+    private Paint mPaint;
+    Bitmap mSrcBitmap;
+    Context context;
+
+    public CalendarShrinkDecoration(Context context) {
+        this.context = context;
+        mPaint = new Paint();
+        mPaint.setStyle(Paint.Style.FILL);
+        mPaint.setColor(0xffDFDEDE);
+        mPaint.setStrokeWidth(0);
+        mPaint.setAntiAlias(true);
+        mSrcBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_calendar_shrink);
+        mHeight = SizeUtils.dp2px(38);
+    }
+
+    public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
+        super.onDrawOver(canvas, parent, state);
+        int mWidth = parent.getWidth();
+        mPaint.setStrokeWidth(1);
+        mPaint.setColor(0xffffffff);
+        canvas.drawRoundRect(new RectF(0, 0, mWidth, mHeight), 0, 0, mPaint);
+        int mBitmapHeight = mSrcBitmap.getHeight();
+        int mBitmapWidth = mSrcBitmap.getWidth();
+
+        RectF rectF = new RectF(mWidth / 2 - mBitmapWidth / 2, mHeight / 2 - mBitmapHeight / 2, mWidth / 2 + mBitmapWidth / 2, mHeight / 2 + mBitmapHeight / 2);
+        canvas.drawBitmap(mSrcBitmap, null, rectF, mPaint);
+
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+        int position = parent.getChildAdapterPosition(view);
+        if (position == 0) {
+            outRect.top = mHeight;
+        }
+    }
+
+
+}

+ 46 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/CourseTableArrowView.java

@@ -0,0 +1,46 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.text.Layout;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import com.cooleshow.teacher.R;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Author by pq, Date on 2022/4/21.
+ */
+public class CourseTableArrowView extends FrameLayout {
+
+    private ImageView mIvArrow;
+
+    public CourseTableArrowView(@NonNull Context context) {
+        this(context, null);
+    }
+
+    public CourseTableArrowView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public CourseTableArrowView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(getContext()).inflate(R.layout.view_course_table_arrow_layout, this, false);
+        mIvArrow = findViewById(R.id.iv_arrow);
+    }
+
+    public void updateArrowUI(boolean isExpend) {
+        if (mIvArrow != null) {
+            mIvArrow.setImageResource(isExpend ? R.drawable.ic_calendar_shrink : R.drawable.ic_calendar_shrink);
+        }
+    }
+}

+ 151 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleMonthView.java

@@ -0,0 +1,151 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.view.View;
+
+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;
+
+    public SimpleMonthView(Context context) {
+        super(context);
+        this.context = context;
+        //兼容硬件加速无效的代码
+        setLayerType(View.LAYER_TYPE_SOFTWARE, mSelectedPaint);
+        setBackgroundColor(Color.WHITE);
+        //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;
+        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) {
+        int cx = x + mItemWidth / 2;
+        int cy = y + mItemHeight / 2;
+        canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
+        return false;
+    }
+
+    /**
+     * 绘制标记的事件日子
+     *
+     * @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) {
+//        int cx = x + mItemWidth / 2;
+//        int cy = y + mItemHeight / 2;
+//        canvas.drawCircle(cx, cy, mRadius, mSchemePaint);
+    }
+
+    /**
+     * 绘制文本
+     *
+     * @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);
+        } 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);
+//            }
+        } 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) {
+        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);
+    }
+}

+ 100 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/SimpleWeekView.java

@@ -0,0 +1,100 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.view.View;
+
+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;
+
+    public SimpleWeekView(Context context) {
+        super(context);
+        this.context = context;
+        setLayerType(View.LAYER_TYPE_SOFTWARE, mSelectedPaint);
+        setBackgroundColor(Color.WHITE);
+        //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;
+        mSchemePaint.setStyle(Paint.Style.STROKE);
+    }
+
+    @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);
+        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);
+    }
+
+    @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);
+        } 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);
+//            }
+        } 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);
+//            }
+        }
+
+    }
+
+    /**
+     * 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);
+    }
+}

BIN
teacher/src/main/res/drawable-xhdpi/icon_arrow_down.png


BIN
teacher/src/main/res/drawable-xxhdpi/ic_calendar_expand.png


BIN
teacher/src/main/res/drawable-xxhdpi/ic_calendar_shrink.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_arrow_down.png


+ 1 - 1
teacher/src/main/res/layout/activity_main.xml

@@ -24,7 +24,7 @@
         app:itemTextAppearanceInactive="@style/bottom_tab_title_inactive"
         app:labelVisibilityMode="labeled"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/mViewpager"
+        app:layout_constraintTop_toBottomOf="@+id/view_pager"
         app:menu="@menu/bottom_nav_item"
         tools:ignore="MissingConstraints" />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 103 - 0
teacher/src/main/res/layout/fragment_course_table_layout.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <View
+        android:id="@+id/view_status_bar"
+        android:layout_width="match_parent"
+        android:layout_height="20dp"
+        app:layout_constrainedHeight="true"
+        app:layout_constraintHeight_default="wrap"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <View
+        android:id="@+id/view_tool_bar_bg"
+        android:layout_width="match_parent"
+        android:layout_height="45dp"
+        android:background="@color/white"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_status_bar" />
+
+    <TextView
+        android:id="@+id/tv_current_date"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_18"
+        app:layout_constraintBottom_toBottomOf="@+id/view_tool_bar_bg"
+        app:layout_constraintLeft_toLeftOf="@+id/view_tool_bar_bg"
+        app:layout_constraintRight_toRightOf="@+id/view_tool_bar_bg"
+        app:layout_constraintTop_toTopOf="@+id/view_tool_bar_bg"
+        tools:text="2021年9月" />
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="3dp"
+        android:src="@drawable/icon_arrow_down"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_current_date"
+        app:layout_constraintLeft_toRightOf="@+id/tv_current_date"
+        app:layout_constraintTop_toTopOf="@+id/tv_current_date" />
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/divide_color2"
+        app:layout_constraintTop_toBottomOf="@+id/view_tool_bar_bg" />
+
+    <com.haibin.calendarview.CalendarLayout
+        android:id="@+id/calendarLayout"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:orientation="vertical"
+        app:calendar_content_view_id="@+id/recyclerView"
+        app:default_status="shrink"
+        app:layout_constraintTop_toBottomOf="@+id/view_tool_bar_bg">
+
+        <com.cooleshow.base.widgets.MyCalenderView
+            android:id="@+id/calendarView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="@dimen/dp_8"
+            android:paddingEnd="@dimen/dp_8"
+            app:calendar_height="@dimen/dp_35"
+            app:week_line_background="@color/color_f2f2f2"
+            app:year_view_background="@color/white"
+            app:current_day_text_color="@color/colorPrimary"
+            app:current_month_text_color="@color/black_444"
+            app:day_text_size="@dimen/dp_15"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:max_year="2100"
+            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_theme_color="@color/white"
+            app:select_mode="single_mode"
+            app:selected_text_color="@color/white"
+            app:selected_theme_color="@color/colorPrimary"
+            app:week_background="@color/white"
+            app:week_bar_height="@dimen/dp_45"
+            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" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="none" />
+    </com.haibin.calendarview.CalendarLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 11 - 0
teacher/src/main/res/layout/item_course_table_layout.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+    <TextView
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_18"
+        android:id="@+id/text"
+        android:layout_width="wrap_content"
+        android:layout_height="50dp"/>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 13 - 0
teacher/src/main/res/layout/view_course_table_arrow_layout.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+    <ImageView
+        android:id="@+id/iv_arrow"
+        android:layout_gravity="center"
+        android:paddingBottom="20dp"
+        android:paddingTop="20dp"
+        android:src="@drawable/ic_calendar_shrink"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+</FrameLayout>

+ 13 - 12
teacher/src/main/res/values/themes.xml

@@ -1,16 +1,17 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <!-- Base application theme. -->
-    <style name="Theme.CooleShow" parent="Theme.AppCompat.Light.NoActionBar">
-        <!-- Primary brand color. -->
-        <item name="colorPrimary">@color/purple_500</item>
-        <item name="colorPrimaryVariant">@color/purple_700</item>
-        <item name="colorOnPrimary">@color/white</item>
-        <!-- Secondary brand color. -->
-        <item name="colorSecondary">@color/teal_200</item>
-        <item name="colorSecondaryVariant">@color/teal_700</item>
-        <item name="colorOnSecondary">@color/black</item>
-        <!-- Status bar color. -->
-        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
-        <!-- Customize your theme here. -->
+    <style name="Theme.CooleShow" parent="BaseAppThemeLight">
     </style>
+
+    <style name="BaseAppThemeLight" parent="Theme.AppCompat.Light.NoActionBar">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowFullscreen">false</item>
+        <item name="android:windowActionBar">false</item>
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+        <item name="windowActionModeOverlay">true</item>
+        <item name="android:windowBackground">@color/color_f8f9fc</item>
+    </style>
+
 </resources>

+ 8 - 8
usercenter/src/main/java/com/cooleshow/usercenter/ui/activity/LoginActivity.kt

@@ -39,14 +39,14 @@ class LoginActivity : BaseMVPActivity<ActivityLoginBinding,LoginPresenter>(), Lo
         }
 
         mLoginBtn.setOnClickListener {
-            if (TextUtils.isEmpty(et_phone_num?.text)) {
-                ToastUtils.showShort("手机号不可为空")
-                return@setOnClickListener;
-            }
-            if (TextUtils.isEmpty(et_password?.text)) {
-                ToastUtils.showShort("密码不可为空")
-                return@setOnClickListener;
-            }
+//            if (TextUtils.isEmpty(et_phone_num?.text)) {
+//                ToastUtils.showShort("手机号不可为空")
+//                return@setOnClickListener;
+//            }
+//            if (TextUtils.isEmpty(et_password?.text)) {
+//                ToastUtils.showShort("密码不可为空")
+//                return@setOnClickListener;
+//            }
 //            mPresenter.login(et_phone_num?.text.toString(), et_password?.text.toString(), "");
             ARouter.getInstance().build(RouterPath.APPCenter.PATH_HOME).navigation()
         }