Procházet zdrojové kódy

兼职工作详情大致完成

liukai před 2 roky
rodič
revize
3803c30f27
24 změnil soubory, kde provedl 1012 přidání a 342 odebrání
  1. 8 0
      app/build.gradle
  2. 1 1
      app/proguard-rules.pro
  3. 3 2
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartJobDetailChildViewModel.kt
  4. 0 1
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartTimeJobDetailViewModel.kt
  5. 2 0
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/activity/PartTimeJobDetailActivity.kt
  6. 53 4
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartJobDetailFragment.kt
  7. 3 1
      cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartJobDetailPaymentFragment.kt
  8. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_address.webp
  9. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_category.webp
  10. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_classify.webp
  11. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_price_bg.webp
  12. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_time.webp
  13. binární
      cpt_parttime/src/main/res/drawable-xxhdpi/job_detail_directions_icon.webp
  14. 5 0
      cpt_parttime/src/main/res/layout/fragment_parttime_job_detail.xml
  15. 448 0
      cpt_parttime/src/main/res/layout/include_part_time_job_detail_fragment.xml
  16. 0 1
      cs_baselib/src/main/java/com/guadou/lib_baselib/base/fragment/BaseVDBLoadingFragment.kt
  17. 1 331
      cs_baselib/src/main/res/layout/layout_placeholder_part_time_detail.xml
  18. 369 0
      cs_baselib/src/main/res/layout/layout_placeholder_part_time_detail_child.xml
  19. 88 0
      cs_cptServices/src/main/java/com/guadou/cs_cptservices/widget/NoPaddingTextView.java
  20. 8 0
      cs_cptServices/src/main/res/drawable/shape_circle_blue.xml
  21. 8 0
      cs_cptServices/src/main/res/drawable/shape_circle_green.xml
  22. 1 1
      cs_cptServices/src/main/res/drawable/shape_circle_red.xml
  23. 8 0
      cs_cptServices/src/main/res/drawable/shape_circle_yellow.xml
  24. 6 0
      cs_cptServices/src/main/res/values/attrs.xml

+ 8 - 0
app/build.gradle

@@ -7,6 +7,14 @@ android {
         versionCode 100
         versionName "1.0.0"
         applicationId "com.hongyegroup.zhurijob"
+
+        resConfigs('zh-rCN')
+
+        ndk {
+            //选择要添加的对应cpu类型的.so库。
+            abiFilters 'armeabi-v7a', 'arm64-v8a'
+        }
+
     }
 }
 

+ 1 - 1
app/proguard-rules.pro

@@ -126,7 +126,7 @@
 #AndPermission
 -dontwarn com.yanzhenjie.permission.**
 
-#光推送
+#光推送
 -dontoptimize
 -dontpreverify
 -dontwarn cn.jpush.**

+ 3 - 2
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartJobDetailChildViewModel.kt

@@ -21,6 +21,7 @@ class PartJobDetailChildViewModel @Inject constructor(
     private val savedStateHandle: SavedStateHandle
 ) : BaseViewModel() {
 
+    var isLoadSuccessed = false
     var mDatas = mutableListOf<PartJobResult>()
     val mAdapter by lazy { BaseDataBindingAdapter(R.layout.item_part_time_jobs, BR.item, mDatas) }
 
@@ -35,7 +36,7 @@ class PartJobDetailChildViewModel @Inject constructor(
             loadStartLoading()
 
             val result = withContext(Dispatchers.IO) {
-                delay(2000)
+                delay(800)
 
                 val list = mutableListOf<PartJobResult>()
                 for (i in 1..10) {
@@ -47,7 +48,7 @@ class PartJobDetailChildViewModel @Inject constructor(
             }
 
             handleData(result)
-            loadSuccess()
+            isLoadSuccessed = true
             liveData.postValue(true)
 
         }

+ 0 - 1
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/mvvm/PartTimeJobDetailViewModel.kt

@@ -44,7 +44,6 @@ class PartTimeJobDetailViewModel @Inject constructor(
             imgUrls.add("http://img.zcool.cn/community/019241565fa3df6ac7255d2e15560a.jpg@1280w_1l_2o_100sh.jpg")
             imgUrls.add("http://img.zcool.cn/community/0158a658a2b836a801219c77059a95.png@1280w_1l_2o_100sh.png")
 
-            loadSuccess()
             liveData.postValue(true)
 
         }

+ 2 - 0
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/activity/PartTimeJobDetailActivity.kt

@@ -107,6 +107,8 @@ class PartTimeJobDetailActivity : YYBaseVDBLoadingActivity<PartTimeJobDetailView
     //查询异步加载的布局和异步的远端数据是否已经准备就绪
     private fun checkView2Showed() {
         if (mViewModel.mPartTimeJobDetail != null && mRootBinding != null) {
+            showStateSuccess()
+
             initPager(hasHow2Report = true, hasGrooming = true)
             popupData2Top()
         }

+ 53 - 4
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartJobDetailFragment.kt

@@ -1,15 +1,22 @@
 package com.hongyegroup.cpt_parttime.ui.fragment
 
 import android.os.Bundle
+import android.view.View
+import androidx.databinding.DataBindingUtil
 import com.guadou.cs_cptservices.base.fragment.YYBaseVDBLoadingFragment
 import com.guadou.cs_cptservices.interfaces.IFragmentRefresh
 import com.guadou.lib_baselib.bean.DataBindingConfig
 import com.guadou.lib_baselib.engine.toast
 import com.guadou.lib_baselib.ext.checkEmpty
 import com.guadou.lib_baselib.ext.vertical
+import com.guadou.lib_baselib.utils.log.YYLogUtils
+import com.guadou.lib_baselib.view.gloading.GLoadingTitleStatus
+import com.guadou.lib_baselib.view.gloading.Gloading
+import com.guadou.lib_baselib.view.gloading.GloadingPlaceHolderlAdapter
 import com.hongyegroup.cpt_parttime.BR
 import com.hongyegroup.cpt_parttime.R
 import com.hongyegroup.cpt_parttime.databinding.FragmentParttimeJobDetailBinding
+import com.hongyegroup.cpt_parttime.databinding.IncludePartTimeJobDetailFragmentBinding
 import com.hongyegroup.cpt_parttime.mvvm.PartJobDetailChildViewModel
 import com.hongyegroup.cpt_parttime.ui.activity.PartTimeJobDetailActivity
 
@@ -18,8 +25,16 @@ import com.hongyegroup.cpt_parttime.ui.activity.PartTimeJobDetailActivity
  */
 class PartJobDetailFragment : YYBaseVDBLoadingFragment<PartJobDetailChildViewModel, FragmentParttimeJobDetailBinding>(), IFragmentRefresh {
 
+    private var mRootBinding: IncludePartTimeJobDetailFragmentBinding? = null
     private val mClickProxy by lazy { ClickProxy() }
 
+    //重新生成GLoading对象-跳动动画
+    override fun generateGLoading(view: View): Gloading.Holder {
+        return Gloading.from(GloadingPlaceHolderlAdapter(R.layout.layout_placeholder_part_time_detail_child))
+            .wrap(view, GLoadingTitleStatus(false, true, false))
+            .withRetry { onGoadingRetry() }
+    }
+
     override fun getDataBindingConfig(): DataBindingConfig {
         return DataBindingConfig(R.layout.fragment_parttime_job_detail, BR.viewModel, mViewModel)
             .addBindingParams(BR.click, mClickProxy)
@@ -32,14 +47,48 @@ class PartJobDetailFragment : YYBaseVDBLoadingFragment<PartJobDetailChildViewMod
 
     override fun onResume() {
         super.onResume()
-        initData()
+        initDataAndRootView()
     }
 
-    private fun initData() {
+    private fun initDataAndRootView() {
+
+        if (!mBinding.viewStubRoot.isInflate()) {
+            val start1 = System.currentTimeMillis()
+            mBinding.viewStubRoot.inflateAsync { view ->
+                val end1 = System.currentTimeMillis()
+                YYLogUtils.w("添加2布局耗时:" + (end1 - start1))
+                mRootBinding = DataBindingUtil.bind<IncludePartTimeJobDetailFragmentBinding>(view)?.apply {
+                    viewModel = mViewModel
+                    click = mClickProxy
+                }
+                popupDetailData()
+                checkView2Showed()
+            }
+        }
+
+        requestRecommendJob()
+
+    }
+
+    //这里请求网络数据完成
+    private fun requestRecommendJob() {
         if (mViewModel.mDatas.checkEmpty()) {
-            mViewModel.getRecommendJobs()
+            mViewModel.getRecommendJobs().observe(this) {
+                checkView2Showed()
+            }
         }
+    }
+
+    //查询异步加载的布局和异步的远端数据是否已经准备就绪
+    private fun checkView2Showed() {
+        if (mViewModel.isLoadSuccessed && mRootBinding != null) {
+            showStateSuccess()
+        }
+    }
 
+    //父Activity传递过来的详情数据展示出来
+    private fun popupDetailData() {
+        //部分使用DataBinding 部分手动赋值
     }
 
     private fun initRV() {
@@ -66,7 +115,7 @@ class PartJobDetailFragment : YYBaseVDBLoadingFragment<PartJobDetailChildViewMod
         if (mViewModel.mDatas.size > 1) {
             mBinding.rvRecommend.scrollToPosition(0)
         }
-        initData()
+        requestRecommendJob()
     }
 
     /**

+ 3 - 1
cpt_parttime/src/main/java/com/hongyegroup/cpt_parttime/ui/fragment/PartJobDetailPaymentFragment.kt

@@ -73,7 +73,9 @@ class PartJobDetailPaymentFragment : YYBaseVDBLoadingFragment<PartJobDetailPayme
     override fun onDestroyView() {
         super.onDestroyView()
         //工具类回收重置状态
-        WebViewManager.recycle(mWebView)
+        if (this::mWebView.isInitialized) {
+            WebViewManager.recycle(mWebView)
+        }
     }
 
     override fun startObserve() {

binární
cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_address.webp


binární
cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_category.webp


binární
cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_classify.webp


binární
cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_price_bg.webp


binární
cpt_parttime/src/main/res/drawable-xxhdpi/iv_job_detail_time.webp


binární
cpt_parttime/src/main/res/drawable-xxhdpi/job_detail_directions_icon.webp


+ 5 - 0
cpt_parttime/src/main/res/layout/fragment_parttime_job_detail.xml

@@ -31,6 +31,11 @@
             android:layout_height="wrap_content"
             android:orientation="vertical">
 
+            <com.guadou.cs_cptservices.widget.AsyncViewStub
+                android:id="@+id/view_stub_root"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                app:layout="@layout/include_part_time_job_detail_fragment" />
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/rv_recommend"

+ 448 - 0
cpt_parttime/src/main/res/layout/include_part_time_job_detail_fragment.xml

@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:binding="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.hongyegroup.cpt_parttime.mvvm.PartJobDetailChildViewModel" />
+
+        <variable
+            name="click"
+            type="com.hongyegroup.cpt_parttime.ui.fragment.PartJobDetailFragment.ClickProxy" />
+
+        <import type="android.text.TextUtils" />
+
+    </data>
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/page_bg"
+        android:orientation="vertical">
+
+        <!--顶部工作详情基本信息-->
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <!--    基本信息     -->
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@color/white"
+                android:orientation="vertical"
+                android:paddingTop="20dp">
+
+                <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/d_30dp"
+                    android:layout_marginTop="@dimen/d_5dp"
+                    android:layout_marginRight="@dimen/d_10dp"
+                    android:drawableLeft="@drawable/iv_job_detail_classify"
+                    android:drawablePadding="@dimen/d_10dp"
+                    android:text="食品宴会"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_15sp" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/d_30dp"
+                    android:layout_marginTop="@dimen/d_15dp"
+                    android:layout_marginRight="@dimen/d_10dp"
+                    android:drawableLeft="@drawable/iv_job_detail_category"
+                    android:drawablePadding="@dimen/d_10dp"
+                    android:text="香格里拉大酒店"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_15sp" />
+
+
+                <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/d_30dp"
+                    android:layout_marginTop="@dimen/d_15dp"
+                    android:layout_marginRight="@dimen/d_10dp"
+                    android:drawableLeft="@drawable/iv_job_detail_address"
+                    android:drawablePadding="@dimen/d_10dp"
+                    android:text="湖北省武汉市东西湖区武汉小镇"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_15sp" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/d_30dp"
+                    android:layout_marginTop="@dimen/d_15dp"
+                    android:layout_marginRight="@dimen/d_10dp"
+                    android:drawableLeft="@drawable/iv_job_detail_time"
+                    android:drawablePadding="@dimen/d_10dp"
+                    android:text="2022/07/29 (06:00-23:00)"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_15sp" />
+
+                <View
+                    android:layout_width="1dp"
+                    android:layout_height="20dp" />
+
+            </LinearLayout>
+
+            <!--   显示时薪   -->
+            <LinearLayout
+                android:layout_width="100dp"
+                android:layout_height="100dp"
+                android:layout_alignParentRight="true"
+                android:layout_marginTop="30dp"
+                android:layout_marginRight="10dp"
+                android:background="@drawable/iv_job_detail_price_bg"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <LinearLayout
+                    android:id="@+id/ll_job_detail_hourly_rate"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_centerInParent="true"
+                    android:gravity="center_horizontal"
+                    android:orientation="horizontal">
+
+                    <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout_marginBottom="@dimen/d_5dp"
+                        android:gravity="bottom"
+                        android:includeFontPadding="false"
+                        android:text="¥"
+                        android:textColor="@color/black"
+                        android:textSize="@dimen/d_13sp" />
+
+                    <com.guadou.cs_cptservices.widget.NoPaddingTextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_centerHorizontal="true"
+                        android:text="18"
+                        android:textColor="@color/black"
+                        android:textSize="29sp"
+                        app:removeDefaultPadding="true"
+                        binding:typefaceRegular="@{true}" />
+
+                </LinearLayout>
+
+                <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:text="/ 小时"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_13sp" />
+
+            </LinearLayout>
+
+        </RelativeLayout>
+
+        <!--Location-导航-->
+        <LinearLayout
+            android:id="@+id/linear_location"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:background="@color/white"
+            android:orientation="vertical"
+            android:paddingBottom="20dp">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="3dp">
+
+                <ImageView
+                    android:layout_width="@dimen/dp_10"
+                    android:layout_height="@dimen/dp_10"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginLeft="20dp"
+                    android:src="@drawable/shape_circle_red" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_marginBottom="10dp"
+                    android:text="地址"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_16sp" />
+
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/d_1dp"
+                android:background="@color/divider_color" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginRight="10dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <ImageView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:src="@drawable/iv_job_detail_address" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                    android:id="@+id/tv_location"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_weight="4"
+                    android:text="湖北省武汉市东西湖区武汉小镇 J栋1822室"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_15sp" />
+
+                <LinearLayout
+                    android:id="@+id/ll_direction_box"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/d_10dp"
+                    android:layout_marginRight="@dimen/d_5dp"
+                    android:background="@drawable/shape_blue_round5"
+                    android:gravity="center"
+                    android:orientation="horizontal">
+
+                    <com.guadou.lib_baselib.font_text_view.TextViewBold
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:drawableLeft="@drawable/job_detail_directions_icon"
+                        android:drawablePadding="@dimen/d_5dp"
+                        android:paddingLeft="@dimen/d_13dp"
+                        android:paddingTop="@dimen/d_8dp"
+                        android:paddingRight="@dimen/d_15dp"
+                        android:paddingBottom="@dimen/d_8dp"
+                        android:text="地图"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/d_14sp" />
+
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <!--候选人的要求-->
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:background="@color/white"
+            android:orientation="vertical"
+            android:paddingBottom="20dp">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="3dp">
+
+                <ImageView
+                    android:layout_width="@dimen/dp_10"
+                    android:layout_height="@dimen/dp_10"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginLeft="20dp"
+                    android:src="@drawable/shape_circle_blue" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_marginBottom="10dp"
+                    android:text="候选人要求"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_16sp" />
+
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/divider_color" />
+
+
+            <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_30dp"
+                android:layout_marginTop="@dimen/d_15dp"
+                android:layout_marginRight="@dimen/d_10dp"
+                android:drawableLeft="@drawable/part_detail_job_age_icon"
+                android:drawablePadding="@dimen/d_10dp"
+                android:text="15,16,17,18-20,21-30"
+                android:textColor="@color/black"
+                android:textSize="@dimen/d_15sp" />
+
+            <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_30dp"
+                android:layout_marginTop="@dimen/d_12dp"
+                android:layout_marginRight="@dimen/d_10dp"
+                android:drawableLeft="@drawable/part_detail_job_lang_icon"
+                android:drawablePadding="@dimen/d_10dp"
+                android:text="中文,英语,马来西亚,法语,德语"
+                android:textColor="@color/black"
+                android:textSize="@dimen/d_15sp" />
+
+            <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_30dp"
+                android:layout_marginTop="@dimen/d_12dp"
+                android:layout_marginRight="@dimen/d_10dp"
+                android:drawableLeft="@drawable/part_detail_job_gender_icon"
+                android:drawablePadding="@dimen/d_10dp"
+                android:text="女性"
+                android:textColor="@color/black"
+                android:textSize="@dimen/d_15sp" />
+
+        </LinearLayout>
+
+        <!--工作的要求-->
+        <LinearLayout
+            android:id="@+id/linear_job_requirement"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/d_10dp"
+            android:background="@color/white"
+            android:orientation="vertical"
+            android:paddingBottom="@dimen/d_20dp">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <ImageView
+                    android:layout_width="10dp"
+                    android:layout_height="10dp"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginLeft="20dp"
+                    android:src="@drawable/shape_circle_green" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_marginBottom="10dp"
+                    android:text="工作要求"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_16sp" />
+
+
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/divider_color" />
+
+            <com.guadou.lib_baselib.font_text_view.TextViewMedium
+                android:id="@+id/text_view_job_requirement"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="10dp"
+                android:text="负责公司办公空间的走廊、电梯、电梯、咖啡、公共卫生等的清洁,保持所有公共卫生的整洁,地面干净,无灰尘,无卫生死角;"
+                android:textColor="@color/black"
+                android:textSize="@dimen/d_15sp" />
+
+        </LinearLayout>
+
+        <!--工作的备注-->
+        <LinearLayout
+            android:id="@+id/linear_remarks"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/d_10dp"
+            android:background="@color/white"
+            android:orientation="vertical"
+            android:visibility="visible">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <ImageView
+                    android:layout_width="10dp"
+                    android:layout_height="10dp"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginLeft="20dp"
+                    android:src="@drawable/shape_circle_yellow" />
+
+                <com.guadou.lib_baselib.font_text_view.TextViewRegular
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_marginBottom="10dp"
+                    android:text="备注"
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/d_16sp" />
+
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/divider_color" />
+
+            <TextView
+                android:id="@+id/text_view_remarks"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="@dimen/d_10dp"
+                android:layout_marginBottom="20dp"
+                android:text="1. 具有深厚的知识底蕴;\n 2. 普通话标准,获得相关资格证书;\n 3. 熟悉主持人工作的具体内容,能根据主持现场 的气氛,即兴发挥,调动全场的气氛;\n 4. 具有传递信息和交流的观念,把听众放在平等 的位置上;\n 5. 有强烈的社会责任感和较高的政治思想水准;\n 6. 具备一定的临场应变和即兴发挥能力;"
+                android:textColor="@color/black"
+                android:textSize="@dimen/d_15sp" />
+
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/d_10dp"
+            android:background="@color/white" />
+
+        <com.guadou.lib_baselib.font_text_view.TextViewRegular
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/gray"
+            android:gravity="center"
+            android:paddingTop="@dimen/d_20dp"
+            android:paddingBottom="@dimen/d_20dp"
+            android:text="你可能感兴趣的工作"
+            android:textColor="@color/black"
+            android:textSize="@dimen/d_16sp">
+
+        </com.guadou.lib_baselib.font_text_view.TextViewRegular>
+
+    </LinearLayout>
+
+</layout>

+ 0 - 1
cs_baselib/src/main/java/com/guadou/lib_baselib/base/fragment/BaseVDBLoadingFragment.kt

@@ -38,7 +38,6 @@ abstract class BaseVDBLoadingFragment<VM : BaseViewModel, VDB : ViewDataBinding>
         startObserve()
     }
 
-
     override fun transformRootView(view: View): View {
 
         mGLoadingHolder = generateGLoading(view)

+ 1 - 331
cs_baselib/src/main/res/layout/layout_placeholder_part_time_detail.xml

@@ -56,337 +56,7 @@
 
     </LinearLayout>
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/d_10dp"
-        android:layout_marginTop="@dimen/d_15dp"
-        android:layout_marginRight="@dimen/d_10dp"
-        android:orientation="vertical">
-
-        <View
-            android:layout_width="80dp"
-            android:layout_height="20dp"
-            android:background="@color/shimmer_background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:orientation="horizontal">
-
-            <View
-                android:layout_width="@dimen/d_90dp"
-                android:layout_height="@dimen/d_60dp"
-                android:background="@color/shimmer_background_color" />
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_marginLeft="@dimen/d_20dp"
-                android:layout_marginRight="@dimen/d_10dp"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/d_20dp"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:layout_marginRight="@dimen/d_80dp"
-            android:background="@color/shimmer_background_color" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/d_10dp"
-        android:layout_marginTop="@dimen/d_20dp"
-        android:layout_marginRight="@dimen/d_10dp"
-        android:orientation="vertical">
-
-        <View
-            android:layout_width="80dp"
-            android:layout_height="20dp"
-            android:background="@color/shimmer_background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:orientation="horizontal">
-
-            <View
-                android:layout_width="@dimen/d_90dp"
-                android:layout_height="@dimen/d_60dp"
-                android:background="@color/shimmer_background_color" />
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_marginLeft="@dimen/d_20dp"
-                android:layout_marginRight="@dimen/d_10dp"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/d_20dp"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:layout_marginRight="@dimen/d_80dp"
-            android:background="@color/shimmer_background_color" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/d_10dp"
-        android:layout_marginTop="@dimen/d_20dp"
-        android:layout_marginRight="@dimen/d_10dp"
-        android:orientation="vertical">
-
-        <View
-            android:layout_width="80dp"
-            android:layout_height="20dp"
-            android:background="@color/shimmer_background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:orientation="horizontal">
-
-            <View
-                android:layout_width="@dimen/d_90dp"
-                android:layout_height="@dimen/d_60dp"
-                android:background="@color/shimmer_background_color" />
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_marginLeft="@dimen/d_20dp"
-                android:layout_marginRight="@dimen/d_10dp"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/d_20dp"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:layout_marginRight="@dimen/d_80dp"
-            android:background="@color/shimmer_background_color" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/d_10dp"
-        android:layout_marginTop="@dimen/d_20dp"
-        android:layout_marginRight="@dimen/d_10dp"
-        android:orientation="vertical">
-
-        <View
-            android:layout_width="80dp"
-            android:layout_height="20dp"
-            android:background="@color/shimmer_background_color" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:orientation="horizontal">
-
-            <View
-                android:layout_width="@dimen/d_90dp"
-                android:layout_height="@dimen/d_60dp"
-                android:background="@color/shimmer_background_color" />
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-            <LinearLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_marginLeft="@dimen/d_20dp"
-                android:layout_marginRight="@dimen/d_10dp"
-                android:gravity="center"
-                android:orientation="vertical">
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-                <View
-                    android:layout_width="100dp"
-                    android:layout_height="@dimen/d_20dp"
-                    android:layout_marginLeft="@dimen/d_10dp"
-                    android:layout_marginTop="@dimen/d_10dp"
-                    android:background="@color/shimmer_background_color" />
-
-            </LinearLayout>
-
-
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/d_20dp"
-            android:layout_marginTop="@dimen/d_10dp"
-            android:layout_marginRight="@dimen/d_80dp"
-            android:background="@color/shimmer_background_color" />
-
-    </LinearLayout>
+    <include layout="@layout/layout_placeholder_part_time_detail_child" />
 
 </LinearLayout>
 

+ 369 - 0
cs_baselib/src/main/res/layout/layout_placeholder_part_time_detail_child.xml

@@ -0,0 +1,369 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tool="http://schemas.android.com/tools"
+    android:id="@+id/ll_placeholder"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_10dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:layout_marginRight="@dimen/d_10dp"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_20dp"
+                android:layout_marginTop="@dimen/d_15dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <View
+                    android:layout_width="@dimen/d_25dp"
+                    android:layout_height="@dimen/d_25dp"
+                    android:background="@drawable/shimmer_circle_background" />
+
+                <View
+                    android:layout_width="@dimen/d_80dp"
+                    android:layout_height="@dimen/d_20dp"
+                    android:layout_marginLeft="@dimen/d_10dp"
+                    android:background="@color/shimmer_background_color" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_20dp"
+                android:layout_marginTop="@dimen/d_15dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <View
+                    android:layout_width="@dimen/d_25dp"
+                    android:layout_height="@dimen/d_25dp"
+                    android:background="@drawable/shimmer_circle_background" />
+
+                <View
+                    android:layout_width="@dimen/d_120dp"
+                    android:layout_height="@dimen/d_20dp"
+                    android:layout_marginLeft="@dimen/d_10dp"
+                    android:background="@color/shimmer_background_color" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/d_20dp"
+                android:layout_marginTop="@dimen/d_15dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal">
+
+                <View
+                    android:layout_width="@dimen/d_25dp"
+                    android:layout_height="@dimen/d_25dp"
+                    android:background="@drawable/shimmer_circle_background" />
+
+                <View
+                    android:layout_width="@dimen/d_150dp"
+                    android:layout_height="@dimen/d_20dp"
+                    android:layout_marginLeft="@dimen/d_10dp"
+                    android:background="@color/shimmer_background_color" />
+
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginTop="@dimen/d_10dp"
+                android:layout_marginRight="@dimen/d_80dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <View
+            android:layout_width="@dimen/d_80dp"
+            android:layout_height="@dimen/d_80dp"
+            android:layout_alignParentRight="true"
+            android:layout_marginTop="@dimen/d_30dp"
+            android:layout_marginRight="@dimen/d_20dp"
+            android:background="@drawable/shimmer_circle_background" />
+
+    </RelativeLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/d_10dp"
+        android:layout_marginTop="@dimen/d_15dp"
+        android:layout_marginRight="@dimen/d_10dp"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_15dp"
+                android:layout_height="@dimen/d_15dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="100dp"
+                android:layout_height="@dimen/d_15dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_80dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="1dp"
+                android:layout_weight="1" />
+
+            <View
+                android:layout_width="@dimen/d_80dp"
+                android:layout_height="@dimen/d_35dp"
+                android:layout_marginRight="@dimen/d_10dp"
+                android:background="@drawable/shimmer_bg_rounded_corners5" />
+
+        </LinearLayout>
+
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_10dp"
+            android:layout_marginRight="@dimen/d_80dp"
+            android:background="@color/shimmer_background_color" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/d_10dp"
+        android:layout_marginTop="@dimen/d_15dp"
+        android:layout_marginRight="@dimen/d_10dp"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_15dp"
+                android:layout_height="@dimen/d_15dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="100dp"
+                android:layout_height="@dimen/d_15dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_80dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_120dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_150dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_10dp"
+            android:layout_marginRight="@dimen/d_80dp"
+            android:background="@color/shimmer_background_color" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/d_10dp"
+        android:layout_marginTop="@dimen/d_15dp"
+        android:layout_marginRight="@dimen/d_10dp"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_15dp"
+                android:layout_height="@dimen/d_15dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="100dp"
+                android:layout_height="@dimen/d_15dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_80dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_120dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_15dp"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="@dimen/d_25dp"
+                android:layout_height="@dimen/d_25dp"
+                android:background="@drawable/shimmer_circle_background" />
+
+            <View
+                android:layout_width="@dimen/d_150dp"
+                android:layout_height="@dimen/d_20dp"
+                android:layout_marginLeft="@dimen/d_10dp"
+                android:background="@color/shimmer_background_color" />
+
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/d_20dp"
+            android:layout_marginTop="@dimen/d_10dp"
+            android:layout_marginRight="@dimen/d_80dp"
+            android:background="@color/shimmer_background_color" />
+
+    </LinearLayout>
+
+</LinearLayout>
+

+ 88 - 0
cs_cptServices/src/main/java/com/guadou/cs_cptservices/widget/NoPaddingTextView.java

@@ -0,0 +1,88 @@
+package com.guadou.cs_cptservices.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+
+import androidx.appcompat.widget.AppCompatTextView;
+
+import com.guadou.cs_cptservices.R;
+
+/**
+ * 没有默认边框的文本
+ */
+public class NoPaddingTextView extends AppCompatTextView {
+    private Paint mPaint = getPaint();
+    private Rect mBounds = new Rect();
+
+    private Boolean mRemoveFontPadding = false;//是否去除字体内边距,true:去除 false:不去除
+
+    public NoPaddingTextView(Context context) {
+        super(context);
+    }
+
+    public NoPaddingTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initAttributes(context, attrs);
+    }
+
+    public NoPaddingTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        initAttributes(context, attrs);
+    }
+
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        if (mRemoveFontPadding) {
+            calculateTextParams();
+            setMeasuredDimension(mBounds.right - mBounds.left, -mBounds.top + mBounds.bottom);
+        }
+    }
+
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+    }
+
+    protected void onDraw(Canvas canvas) {
+        drawText(canvas);
+    }
+
+    /**
+     * 初始化属性
+     */
+    private void initAttributes(Context context, AttributeSet attrs) {
+        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.NoPaddingTextView);
+        mRemoveFontPadding = typedArray.getBoolean(R.styleable.NoPaddingTextView_removeDefaultPadding, false);
+        typedArray.recycle();
+    }
+
+    /**
+     * 计算文本参数
+     */
+    private String calculateTextParams() {
+        String text = getText().toString();
+        int textLength = text.length();
+        mPaint.getTextBounds(text, 0, textLength, mBounds);
+        if (textLength == 0) {
+            mBounds.right = mBounds.left;
+        }
+        return text;
+    }
+
+    /**
+     * 绘制文本
+     */
+    private void drawText(Canvas canvas) {
+        String text = calculateTextParams();
+        int left = mBounds.left;
+        int bottom = mBounds.bottom;
+        mBounds.offset(-mBounds.left, -mBounds.top);
+        mPaint.setAntiAlias(true);
+        mPaint.setColor(getCurrentTextColor());
+        canvas.drawText(text, (float) (-left), (float) (mBounds.bottom - bottom), mPaint);
+    }
+}
+

+ 8 - 0
cs_cptServices/src/main/res/drawable/shape_circle_blue.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/app_blue" />
+    <size
+        android:width="10dp"
+        android:height="10dp" />
+</shape>

+ 8 - 0
cs_cptServices/src/main/res/drawable/shape_circle_green.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/green" />
+    <size
+        android:width="10dp"
+        android:height="10dp" />
+</shape>

+ 1 - 1
cs_cptServices/src/main/res/drawable/shape_circle_red.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="#ff5e75" />
+    <solid android:color="@color/profile_red" />
     <size
         android:width="10dp"
         android:height="10dp" />

+ 8 - 0
cs_cptServices/src/main/res/drawable/shape_circle_yellow.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="#FFAF43" />
+    <size
+        android:width="10dp"
+        android:height="10dp" />
+</shape>

+ 6 - 0
cs_cptServices/src/main/res/values/attrs.xml

@@ -40,8 +40,14 @@
         <attr name="paintMinWidth" format="dimension" />
     </declare-styleable>
 
+    <!--  异步加载布局  -->
     <declare-styleable name="AsyncViewStub">
         <attr name="layout" format="reference" />
     </declare-styleable>
 
+    <!--  没有边框的TextView  -->
+    <declare-styleable name="NoPaddingTextView">
+        <attr name="removeDefaultPadding" format="boolean" />
+    </declare-styleable>
+
 </resources>