From 4e0525287189ead2b40d86cde62d96890db1389b Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 31 三月 2025 09:02:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 app/src/main/res/drawable/member_background.xml                                  |    8 
 .idea/deploymentTargetSelector.xml                                               |    4 
 app/src/main/res/drawable/gray_border_shape.xml                                  |    7 
 app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt         |   23 
 app/src/main/res/drawable/error_placeholder.xml                                  |    9 
 app/src/main/res/layout/content_vip.xml                                          |   19 
 app/src/main/res/layout/item_card_single_month.xml                               |   68 +
 app/src/main/res/navigation/nav_graph.xml                                        |   28 
 app/src/main/res/drawable/more_benefit_shape.xml                                 |   10 
 app/src/main/res/mipmap/vip_no.png                                               |    0 
 .idea/misc.xml                                                                   |    2 
 app/src/main/res/drawable/ic_reminder.xml                                        |   12 
 app/src/main/res/mipmap/vip_more.png                                             |    0 
 .idea/gradle.xml                                                                 |    3 
 app/src/main/res/mipmap/vip_ad_no.png                                            |    0 
 app/src/main/res/layout/vip_protocol_dialog_custom.xml                           |   44 +
 app/src/main/res/drawable/checkbox_round.xml                                     |    7 
 app/src/main/res/values-w1240dp/dimens.xml                                       |    3 
 app/src/main/res/values/dimens.xml                                               |    1 
 app/src/main/res/layout/fragment_member_info_card.xml                            |   91 ++
 app/src/main/res/mipmap/vip_bar_sta.png                                          |    0 
 app/src/main/java/com/example/firstapp/model/MoreMemberBenefitItem.kt            |    4 
 app/src/main/res/drawable/round_red_bg.xml                                       |    5 
 app/src/main/res/layout/activity_vip.xml                                         |  499 +++++++++++++
 app/src/main/res/drawable/wechat_shape.xml                                       |    6 
 app/src/main/res/drawable/checkbox_round_selected.xml                            |    7 
 app/src/main/res/mipmap/vip_ling.png                                             |    0 
 app/src/main/res/layout/fragment_second.xml                                      |   35 
 app/src/main/res/mipmap/vip_ai_ass_icon.png                                      |    0 
 app/src/main/res/drawable/ic_check.xml                                           |   14 
 app/src/main/res/mipmap/vip_right.png                                            |    0 
 app/src/main/java/com/example/firstapp/activity/SecondFragment.kt                |   45 +
 app/src/main/res/drawable/ic_category.xml                                        |   12 
 app/src/main/res/drawable/dialog_background.xml                                  |   16 
 app/src/main/res/values-w600dp/dimens.xml                                        |    3 
 app/src/main/res/layout/fragment_first.xml                                       |   35 
 app/src/main/res/drawable/round_transition_gray_bg.xml                           |    9 
 app/src/main/java/com/example/firstapp/adapter/CardAdapter.kt                    |  126 +++
 app/src/main/res/layout/item_card_yearly.xml                                     |  115 +++
 app/src/main/res/mipmap/vip_life_insurance.png                                   |    0 
 app/src/main/java/com/example/firstapp/activity/VipActivity.kt                   |  387 ++++++++++
 app/src/main/res/layout/vip_protocol_dialog_custom_bak.xml                       |   52 +
 app/src/main/res/xml/network_security_config.xml                                 |    1 
 app/src/main/res/mipmap/vip_cancel_link.png                                      |    0 
 app/src/main/res/mipmap/vip_circle_pie.png                                       |    0 
 app/src/main/res/values-land/dimens.xml                                          |    3 
 app/src/main/res/drawable/gold_border_shape.xml                                  |    7 
 app/src/main/res/mipmap/vip.png                                                  |    0 
 app/src/main/res/mipmap/vip_wechat.png                                           |    0 
 app/src/main/res/mipmap/vip_copy.png                                             |    0 
 app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt |   48 
 app/src/main/res/mipmap/vip_free_member.png                                      |    0 
 app/src/main/res/mipmap/vip_alipay.png                                           |    0 
 app/src/main/res/mipmap/vip_card.png                                             |    0 
 app/src/main/res/mipmap/vip_cancel.png                                           |    0 
 app/src/main/res/drawable/alipay_shape.xml                                       |    6 
 app/src/main/AndroidManifest.xml                                                 |   26 
 app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt          |  118 +++
 app/src/main/java/com/example/firstapp/database/service/ApiService.kt            |    2 
 app/src/main/java/com/example/firstapp/model/CardData.kt                         |   24 
 app/src/main/res/layout/item_card.xml                                            |   46 +
 app/src/main/java/com/example/firstapp/model/MemberBenefitItem.kt                |    5 
 app/src/main/java/com/example/firstapp/activity/FirstFragment.kt                 |   45 +
 app/src/main/res/drawable/black_button_background.xml                            |    6 
 app/src/main/res/drawable/ic_stats.xml                                           |   12 
 app/src/main/res/layout/item_card_continue_monthly.xml                           |  163 ++++
 66 files changed, 2,171 insertions(+), 50 deletions(-)

diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 3b8cd93..e918287 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2025-02-25T09:44:45.437232500Z">
+        <DropdownSelection timestamp="2025-03-28T01:17:48.834725500Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=88Y5T19C14010323" />
+              <DeviceId pluginId="PhysicalDevice" identifier="serial=HMQNW19A24001406" />
             </handle>
           </Target>
         </DropdownSelection>
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index ad84da2..cb865f6 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,9 +4,8 @@
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
-        <option name="testRunner" value="CHOOSE_PER_TEST" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="17" />
+        <option name="gradleJvm" value="jbr-17" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index d7916a5..8978d23 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0f78127..99381b1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -83,13 +83,19 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/Theme.FirstApp"
-        tools:targetApi="31">
-<!--        <activity-->
-<!--            android:name=".ui.reminderOther.ReminderOtherAddActivity2"-->
-<!--            android:configChanges="orientation|keyboardHidden|screenSize"-->
-<!--            android:exported="false"-->
-<!--            android:label="@string/title_activity_reminder_other_add2"-->
-<!--            android:theme="@style/Theme.FirstApp.Fullscreen" />-->
+        tools:targetApi="31"
+        android:usesCleartextTraffic="true"
+        >
+        <activity
+            android:name=".activity.VipActivity"
+            android:exported="false"
+            android:theme="@style/Theme.FirstApp" />
+        <activity
+            android:name=".ui.reminderOther.ReminderOtherAddActivity2"
+            android:configChanges="orientation|keyboardHidden|screenSize"
+            android:exported="false"
+            android:label="@string/title_activity_reminder_other_add2"
+            android:theme="@style/Theme.FirstApp.Fullscreen" />
         <activity
             android:name=".activity.LoginActivity"
             android:exported="true"
@@ -106,11 +112,11 @@
             android:exported="false" />
         <activity
             android:name=".activity.PickupActivity"
-            android:exported="false"/>
+            android:exported="false" />
         <activity
             android:name=".activity.ContentDetailActivity"
-            android:theme="@style/Theme.ContentDetail"
-            android:exported="false" />
+            android:exported="false"
+            android:theme="@style/Theme.ContentDetail" />
         <activity
             android:name=".ui.profile.EditProfileActivity"
             android:exported="false"/>
diff --git a/app/src/main/java/com/example/firstapp/activity/FirstFragment.kt b/app/src/main/java/com/example/firstapp/activity/FirstFragment.kt
new file mode 100644
index 0000000..9cc51ef
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/activity/FirstFragment.kt
@@ -0,0 +1,45 @@
+package com.example.firstapp.activity
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.fragment.findNavController
+import com.example.firstapp.R
+import com.example.firstapp.databinding.FragmentFirstBinding
+
+/**
+ * A simple [Fragment] subclass as the default destination in the navigation.
+ */
+class FirstFragment : Fragment() {
+
+    private var _binding: FragmentFirstBinding? = null
+
+    // This property is only valid between onCreateView and
+    // onDestroyView.
+    private val binding get() = _binding!!
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+
+        _binding = FragmentFirstBinding.inflate(inflater, container, false)
+        return binding.root
+
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        binding.buttonFirst.setOnClickListener {
+            findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
+        }
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/activity/SecondFragment.kt b/app/src/main/java/com/example/firstapp/activity/SecondFragment.kt
new file mode 100644
index 0000000..8f44618
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/activity/SecondFragment.kt
@@ -0,0 +1,45 @@
+package com.example.firstapp.activity
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.navigation.fragment.findNavController
+import com.example.firstapp.R
+import com.example.firstapp.databinding.FragmentSecondBinding
+
+/**
+ * A simple [Fragment] subclass as the second destination in the navigation.
+ */
+class SecondFragment : Fragment() {
+
+    private var _binding: FragmentSecondBinding? = null
+
+    // This property is only valid between onCreateView and
+    // onDestroyView.
+    private val binding get() = _binding!!
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+
+        _binding = FragmentSecondBinding.inflate(inflater, container, false)
+        return binding.root
+
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        binding.buttonSecond.setOnClickListener {
+            findNavController().navigate(R.id.action_SecondFragment_to_FirstFragment)
+        }
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/activity/VipActivity.kt b/app/src/main/java/com/example/firstapp/activity/VipActivity.kt
new file mode 100644
index 0000000..56df585
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/activity/VipActivity.kt
@@ -0,0 +1,387 @@
+package com.example.firstapp.activity
+
+import android.app.AlertDialog
+import android.graphics.Color
+import android.os.Bundle
+import android.util.TypedValue
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.Button
+import android.widget.CheckBox
+import android.widget.CompoundButton
+import android.widget.EditText
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.cardview.widget.CardView
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.Observer
+import androidx.lifecycle.lifecycleScope
+import androidx.navigation.ui.AppBarConfiguration
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.firstapp.R
+import com.example.firstapp.adapter.CardAdapter
+import com.example.firstapp.database.service.RetrofitClient
+import com.example.firstapp.databinding.ActivityVipBinding
+import com.example.firstapp.model.CardData
+import com.example.firstapp.model.MemberBenefitItem
+import com.example.firstapp.pay.PayAbility
+import com.example.firstapp.utils.Log
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import kotlinx.coroutines.launch
+
+
+class VipActivity : AppCompatActivity() {
+
+    private lateinit var appBarConfiguration: AppBarConfiguration
+    private lateinit var binding: ActivityVipBinding
+    private var isPaymentSelected = false // 全局变量,默认未选中
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        binding = ActivityVipBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        setSupportActionBar(binding.toolbar)
+
+        // 显式设置 MaterialToolbar 的标题
+        supportActionBar?.title = ""
+
+        // 如果不需要 ActionBar 的导航功能,可以禁用
+//        supportActionBar?.setDisplayHomeAsUpEnabled(false)
+//        supportActionBar?.setDisplayShowHomeEnabled(false)
+
+
+        // 返回事件
+        binding.ivBack.setOnClickListener{
+            finish()
+        }
+
+//        会员卡片初始化
+        vipCardInit()
+
+//        会员权益初始化
+        memberBenefitInit()
+
+        // 支付宝点击事件
+        handleAlipayClick()
+
+        // 微信点击事件
+        handleWechatClick()
+
+        // 勾选协议点击事件
+        handlePrototalClick()
+    }
+
+
+    private fun handlePrototalClick(){
+        val protocol: CheckBox = findViewById(R.id.protocol_checkbox);
+
+        // 监听 RadioButton 选中状态
+        protocol.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
+            isPaymentSelected = isChecked // 更新全局变量
+            if(isChecked){
+                protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round_selected)
+            }else{
+                protocol.background = ContextCompat.getDrawable(this, R.drawable.checkbox_round)
+            }
+        })
+    }
+
+    // 这里添加alipay_layout的点击事件
+    private fun handleAlipayClick() {
+        // 绑定按钮
+        val btnAlipay: LinearLayout = findViewById(R.id.alipay_layout);
+        btnAlipay.setOnClickListener(View.OnClickListener {
+            // 判断协议是否勾选
+            if (!isPaymentSelected){
+                // 这里需要弹出框
+                showConfirmDialog()
+            }else{
+                doAlipay()
+            }
+
+
+        })
+    }
+
+    private fun doAlipay(){
+        lifecycleScope.launch {
+            try {
+                val response = RetrofitClient.apiService.getPayOrderInfo()
+                var orderInfo=response.data
+                Log.d("AliPayHelper","获取订单信息时: ${response}")
+                // 这里调用支付宝
+                PayAbility.aliPay(this@VipActivity, orderInfo, Observer {
+                    when (it.resultStatus) {
+                        "9000" -> {
+//                                Snackbar.make(binding.root, "支付成功", Snackbar.LENGTH_LONG).show()
+                            runOnUiThread {
+                                Toast.makeText(this@VipActivity, "支付成功", Toast.LENGTH_LONG).show()
+                            }
+                        }
+                        else -> {
+//                                Snackbar.make(binding.root, "支付失败", Snackbar.LENGTH_LONG).show()
+
+                            runOnUiThread {
+                                Toast.makeText(this@VipActivity, "支付失败", Toast.LENGTH_LONG).show()
+                            }
+                        }
+                    }
+                })
+
+            } catch (e: Exception) {
+                Toast.makeText(this@VipActivity, e.message, Toast.LENGTH_LONG).show()
+                Log.d("AliPayHelper","获取订单信息时发生错误: ${e.message}")
+            }
+        }
+    }
+
+    private fun showConfirmDialog() {
+        val dialogView = LayoutInflater.from(this).inflate(R.layout.vip_protocol_dialog_custom, null)
+
+        val dialog = AlertDialog.Builder(this)
+            .setView(dialogView)
+            .create()
+
+        // 设置自定义背景
+        dialog.window?.setBackgroundDrawableResource(R.drawable.dialog_background)
+
+        // 获取按钮并设置点击事件
+        val btnConfirm = dialogView.findViewById<Button>(R.id.btnConfirm)
+        btnConfirm.setOnClickListener {
+            // 将协议勾选上
+            val protocol: CheckBox = findViewById(R.id.protocol_checkbox);
+            protocol.isChecked = true
+
+            doAlipay()
+            dialog.dismiss()
+        }
+
+        // 显示对话框
+        dialog.show()
+    }
+    private fun showConfirmDialog2() {
+        // 创建标题 TextView 并居中
+        val titleView = TextView(this).apply {
+            text = "确认开通"
+            textSize = 20f
+            gravity = Gravity.CENTER
+            setPadding(20, 20, 20, 20)
+        }
+
+        // 创建内容 TextView 并居中
+        val messageView = TextView(this).apply {
+            text = "请阅读并同意《会员协议》?"
+            textSize = 16f
+            gravity = Gravity.CENTER
+            setPadding(40, 20, 40, 20)
+        }
+
+        AlertDialog.Builder(this)
+            .setCustomTitle(titleView)  // 自定义标题
+            .setView(messageView)  // 自定义内容
+            .setPositiveButton("继续开通") { _, _ ->
+
+
+
+                // 确认支付
+                doAlipay()
+            }
+            .setNegativeButton("取消") { dialog, _ ->
+                dialog.dismiss() // 关闭对话框
+            }
+            .show()
+    }
+
+    // 这里添加alipay_layout的点击事件
+    private fun handleWechatClick() {
+
+        // 绑定按钮
+        val wechatAlipay: LinearLayout = findViewById(R.id.wechat_layout);
+        wechatAlipay.setOnClickListener(View.OnClickListener {
+            lifecycleScope.launch {
+                try {
+                    // 判断协议是否勾选
+                    if (!isPaymentSelected){
+
+                        Toast.makeText(this@VipActivity, "请勾选协议", Toast.LENGTH_LONG).show()
+                        return@launch // 直接 return,不往下执行
+                    }
+                    Toast.makeText(this@VipActivity, "功能暂未开放", Toast.LENGTH_LONG).show()
+                    return@launch
+
+
+                } catch (e: Exception) {
+                    Toast.makeText(this@VipActivity, e.message, Toast.LENGTH_LONG).show()
+                    Log.d("AliPayHelper","获取订单信息时发生错误: ${e.message}")
+                }
+            }
+        })
+
+
+    }
+
+
+    private fun vipCardInit() {
+        val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
+        recyclerView.layoutManager =
+            LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
+
+        val cardList = listOf(
+            CardData.ContinueMonthly(
+                "首月限时特惠",
+                "连续包月",
+                "首次开通",
+                "9.9",
+                "次月起12元/月",
+                "自动续费可随时取消"
+            ),
+            CardData.Yearly(
+                "折合9元/月",
+                "年卡",
+                "108",
+                "168"
+            ),
+            CardData.SingleMonth(
+                "1个月",
+                "15"
+            )
+        )
+
+        val adapter = CardAdapter(cardList) { cardViewList, cardData, cardView ->
+            handleVipCardClick(cardViewList, cardData, cardView)
+        }
+
+        recyclerView.adapter = adapter
+    }
+
+    private fun memberBenefitInit() {
+        val container = findViewById<ConstraintLayout>(R.id.dynamicContainer)
+
+        // 传递过来的数据列表
+        val itemList = listOf(
+            MemberBenefitItem(R.mipmap.vip_life_insurance, "自定义更多分类", true),
+            MemberBenefitItem(R.mipmap.vip_ad_no, "自动去广告", false),
+            MemberBenefitItem(R.mipmap.vip_ling, "公众号提醒待办", true),
+            MemberBenefitItem(R.mipmap.vip_circle_pie, "数据统计", false)
+        )
+
+        var previousViewId = R.id.dynamicContainer
+
+        for ((index, item) in itemList.withIndex()) {
+            val iconView = ImageView(this).apply {
+                id = View.generateViewId()
+                setImageResource(item.iconRes)
+                layoutParams = ConstraintLayout.LayoutParams(
+                    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt(),
+                    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt()
+                )
+            }
+
+            val textView = TextView(this).apply {
+                id = View.generateViewId()
+                text = item.text
+                textSize = 16f
+                setTextColor(Color.parseColor("#DFC08E"))
+            }
+
+            val checkView = ImageView(this).apply {
+                id = View.generateViewId()
+                setImageResource(R.drawable.ic_check)
+                layoutParams = ConstraintLayout.LayoutParams(
+                    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt(),
+                    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, resources.displayMetrics).toInt()
+                )
+            }
+
+            container.addView(iconView)
+            container.addView(textView)
+            container.addView(checkView)
+
+            val constraintSet = ConstraintSet()
+            constraintSet.clone(container)
+
+            // Icon 位置
+            constraintSet.connect(
+                iconView.id,
+                ConstraintSet.TOP,
+                previousViewId,
+                if (index == 0) ConstraintSet.TOP else ConstraintSet.BOTTOM,
+                16
+            )
+            constraintSet.connect(
+                iconView.id,
+                ConstraintSet.START,
+                ConstraintSet.PARENT_ID,
+                ConstraintSet.START,
+                16
+            )
+
+            // Text 位置
+            constraintSet.connect(textView.id, ConstraintSet.TOP, iconView.id, ConstraintSet.TOP)
+            constraintSet.connect(
+                textView.id,
+                ConstraintSet.START,
+                iconView.id,
+                ConstraintSet.END,
+                8
+            )
+
+            // Check 位置
+            constraintSet.connect(checkView.id, ConstraintSet.TOP, iconView.id, ConstraintSet.TOP)
+            constraintSet.connect(
+                checkView.id,
+                ConstraintSet.END,
+                ConstraintSet.PARENT_ID,
+                ConstraintSet.END,
+                16
+            )
+
+            constraintSet.applyTo(container)
+
+            previousViewId = iconView.id
+        }
+    }
+
+    /**
+     * 会员卡样式点击事件
+     */
+    private fun handleVipCardClick(cardViewList: MutableList<CardView>, cardData: CardData, cardView: CardView) {
+        // 处理点击事件,修改样式
+        // 修改所有的边框色都是灰色
+        cardViewList.forEach { card ->
+            card.foreground = ContextCompat.getDrawable(this, R.drawable.gray_border_shape)  // 设置自定义背景
+        }
+
+        // 单独将点击的卡片边框颜色改为金色
+//            cardView.setCardBackgroundColor(Color.parseColor("#FF0000")) // 举例:设置背景颜色
+        cardView.foreground = ContextCompat.getDrawable(this, R.drawable.gold_border_shape)  // 设置自定义背景
+        val title = when (cardData) {
+            is CardData.ContinueMonthly -> cardData.title
+            is CardData.Yearly -> cardData.title
+            is CardData.SingleMonth -> cardData.title
+        }
+        val price = when (cardData) {
+            is CardData.ContinueMonthly -> cardData.price
+            is CardData.Yearly -> cardData.price
+            is CardData.SingleMonth -> cardData.price
+        }
+
+
+        val alipayAmount:TextView = findViewById(R.id.alipay_amount);
+        val wechatAmount:TextView = findViewById(R.id.wechat_amount);
+        alipayAmount.text=price
+        wechatAmount.text=price
+        // 处理点击事件,这里我们只是简单地展示一个 Toast
+        Toast.makeText(this, "点击了: ${title}", Toast.LENGTH_SHORT).show()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/adapter/CardAdapter.kt b/app/src/main/java/com/example/firstapp/adapter/CardAdapter.kt
new file mode 100644
index 0000000..f9b45f3
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/adapter/CardAdapter.kt
@@ -0,0 +1,126 @@
+package com.example.firstapp.adapter
+
+import android.graphics.Color
+import android.graphics.Paint
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.cardview.widget.CardView
+import androidx.recyclerview.widget.RecyclerView
+import com.example.firstapp.R
+import com.example.firstapp.model.CardData
+
+
+class CardAdapter(private val cardList: List<CardData>,
+                  private val itemClickListener: (MutableList<CardView>, CardData, CardView) -> Unit
+    ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
+
+    private val CONTINUE_MONTHLY_VIEW_TYPE = 0
+    private val YEARLY_VIEW_TYPE = 1
+    private val SINGLE_MONTH_VIEW_TYPE = 2
+
+    private val cardViewList: MutableList<CardView> = mutableListOf()
+
+    override fun getItemViewType(position: Int): Int {
+        return when (cardList[position]) {
+            is CardData.ContinueMonthly -> CONTINUE_MONTHLY_VIEW_TYPE
+            is CardData.Yearly -> YEARLY_VIEW_TYPE
+            is CardData.SingleMonth -> SINGLE_MONTH_VIEW_TYPE
+        }
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+        return when (viewType) {
+            CONTINUE_MONTHLY_VIEW_TYPE -> {
+                val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card_continue_monthly, parent, false)
+                ContinueMonthlyViewHolder(view)
+            }
+            YEARLY_VIEW_TYPE -> {
+                val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card_yearly, parent, false)
+                YearlyViewHolder(view)
+            }
+            SINGLE_MONTH_VIEW_TYPE -> {
+                val view = LayoutInflater.from(parent.context).inflate(R.layout.item_card_single_month, parent, false)
+                SingleMonthViewHolder(view)
+            }
+            else -> throw IllegalArgumentException("Unknown view type")
+        }
+    }
+
+    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+        when (holder) {
+            is ContinueMonthlyViewHolder -> {
+                val data = cardList[position] as CardData.ContinueMonthly
+
+                holder.firstMonthTag.text = data.firstMonthTag
+                holder.titleText.text = data.title
+                holder.subTitleText.text = data.subTitle
+                holder.priceText.text = data.price
+                holder.nextPriceText.text = data.nextPrice
+                holder.autoRenewText.text = data.autoRenew
+
+                cardViewList.add(holder.cardView)
+
+                holder.itemView.setOnClickListener { itemClickListener(cardViewList,data, holder.cardView) } // 设置点击事件
+            }
+            is YearlyViewHolder -> {
+                val data = cardList[position] as CardData.Yearly
+                holder.discountTag.text = data.discountTag
+                holder.titleText.text = data.title
+                holder.priceText.text = data.price
+                holder.originalPriceText.text = data.originalPrice
+
+                // 设置中划线
+                val paint = holder.originalPriceText.paint
+                paint.flags = paint.flags or Paint.STRIKE_THRU_TEXT_FLAG
+                paint.color = Color.RED // 设置中划线的颜色
+
+                cardViewList.add(holder.cardView)
+
+                holder.itemView.setOnClickListener { itemClickListener(cardViewList,data, holder.cardView) } // 设置点击事件
+            }
+            is SingleMonthViewHolder -> {
+                val data = cardList[position] as CardData.SingleMonth
+                holder.titleText.text = data.title
+                holder.priceText.text = data.price
+
+                cardViewList.add(holder.cardView)
+
+                holder.itemView.setOnClickListener { itemClickListener(cardViewList,data, holder.cardView) } // 设置点击事件
+
+            }
+        }
+    }
+
+    override fun getItemCount(): Int {
+        return cardList.size
+    }
+
+    inner class ContinueMonthlyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+        val cardView: CardView = view.findViewById(R.id.vip_first_month_card_view)
+        val firstMonthTag: TextView = view.findViewById(R.id.first_month_tag)
+        val titleText: TextView = view.findViewById(R.id.title_text)
+        val subTitleText: TextView = view.findViewById(R.id.sub_title_text)
+        val priceText: TextView = view.findViewById(R.id.price_text)
+        val nextPriceText: TextView = view.findViewById(R.id.next_price_text)
+        val autoRenewText: TextView = view.findViewById(R.id.auto_renew_text)
+
+    }
+
+    inner class YearlyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+        val cardView: CardView = view.findViewById(R.id.vip_year_card_view)
+        val discountTag: TextView = view.findViewById(R.id.discount_tag)
+        val titleText: TextView = view.findViewById(R.id.yearly_title_text)
+        val priceText: TextView = view.findViewById(R.id.yearly_price_text)
+        val originalPriceText: TextView = view.findViewById(R.id.yearly_original_price_text)
+
+    }
+
+    inner class SingleMonthViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+        val cardView: CardView = view.findViewById(R.id.vip_month_card_view)
+        val titleText: TextView = view.findViewById(R.id.single_month_title_text)
+        val priceText: TextView = view.findViewById(R.id.single_month_price_text)
+
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
index 0e52267..99dbf56 100644
--- a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
+++ b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
@@ -48,7 +48,7 @@
     @GET("config-security/enable-list-all")
     suspend fun getSecurityList(): SecurityResponse
 
-    @GET("alipay/pay-order-info")
+    @GET("v2/alipay/pay-order-info")
     suspend fun getPayOrderInfo(): AlipayOrderInfoResponse
 
     @GET("flower/api/supplier/info/{phone}")
diff --git a/app/src/main/java/com/example/firstapp/model/CardData.kt b/app/src/main/java/com/example/firstapp/model/CardData.kt
new file mode 100644
index 0000000..4c4ef14
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/model/CardData.kt
@@ -0,0 +1,24 @@
+package com.example.firstapp.model
+
+sealed class CardData {
+    data class ContinueMonthly(
+        val firstMonthTag: String,
+        val title: String,
+        val subTitle: String,
+        val price: String,
+        val nextPrice: String,
+        val autoRenew: String
+    ) : CardData()
+
+    data class Yearly(
+        val discountTag: String,
+        val title: String,
+        val price: String,
+        val originalPrice: String
+    ) : CardData()
+
+    data class SingleMonth(
+        val title: String,
+        val price: String
+    ) : CardData()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/model/MemberBenefitItem.kt b/app/src/main/java/com/example/firstapp/model/MemberBenefitItem.kt
new file mode 100644
index 0000000..179daa5
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/model/MemberBenefitItem.kt
@@ -0,0 +1,5 @@
+package com.example.firstapp.model
+
+class MemberBenefitItem ( val iconRes: Int,
+                          val text: String,
+                          val isChecked: Boolean )
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/model/MoreMemberBenefitItem.kt b/app/src/main/java/com/example/firstapp/model/MoreMemberBenefitItem.kt
new file mode 100644
index 0000000..ceb96ad
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/model/MoreMemberBenefitItem.kt
@@ -0,0 +1,4 @@
+package com.example.firstapp.model
+
+class MoreMemberBenefitItem (val iconRes: Int,
+                             val text: String)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
index 4d79729..527fa09 100644
--- a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
@@ -31,6 +31,7 @@
 import com.google.android.material.snackbar.Snackbar
 import kotlinx.coroutines.launch
 import com.bumptech.glide.Glide
+import com.example.firstapp.activity.VipActivity
 import com.example.firstapp.database.response.UserInfo
 
 class NotificationsFragment : Fragment() {
@@ -129,39 +130,6 @@
 
     private fun setupClickListeners() {
 
-        // 支付插件
-//        binding.payPlugin.setOnClickListener {
-//            // 跳转到支付插件页面
-//            lifecycleScope.launch {
-//                try {
-//                    val response = RetrofitClient.apiService.getPayOrderInfo()
-//                    var orderInfo=response.data
-//                    Log.d("AliPayHelper","获取订单信息时: ${response}")
-//                    // 这里调用支付宝
-//                    PayAbility.aliPay(requireActivity(), orderInfo, Observer {
-//                        when (it.resultStatus) {
-//                            "9000" -> {
-////                                Snackbar.make(binding.root, "支付成功", Snackbar.LENGTH_LONG).show()
-//                                requireActivity().runOnUiThread {
-//                                    Toast.makeText(requireContext(), "支付成功", Toast.LENGTH_LONG).show()
-//                                }
-//                            }
-//                            else -> {
-////                                Snackbar.make(binding.root, "支付失败", Snackbar.LENGTH_LONG).show()
-//                                requireActivity().runOnUiThread {
-//                                    Toast.makeText(requireContext(), "支付失败", Toast.LENGTH_LONG).show()
-//                                }
-//
-//                            }
-//                        }
-//                    })
-//
-//                } catch (e: Exception) {
-//                    Log.d("AliPayHelper","获取订单信息时发生错误: ${e.message}")
-//                }
-//            }
-//        }
-
 
         // 设置提醒
         binding.layoutReminder.setOnClickListener {
@@ -232,8 +200,20 @@
 
         // VIP续费
         binding.btnRenew.setOnClickListener {
-            Toast.makeText(context, "VIP续费功能开发中", Toast.LENGTH_SHORT).show()
+//            Toast.makeText(context, "VIP续费功能开发中", Toast.LENGTH_SHORT).show()
+            // 跳转到vipActivity
+            val intent = Intent(requireContext(), VipActivity::class.java)
+            startActivity(intent)
         }
+
+        binding.cardVip.setOnClickListener {
+//            Toast.makeText(context, "VIP续费功能开发中", Toast.LENGTH_SHORT).show()
+            // 跳转到vipActivity
+            val intent = Intent(requireContext(), VipActivity::class.java)
+            startActivity(intent)
+        }
+
+
     }
 
     private fun showEmailDialog() {
diff --git a/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt
new file mode 100644
index 0000000..3671d10
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt
@@ -0,0 +1,118 @@
+package com.example.firstapp.ui.vip
+
+import android.graphics.drawable.Drawable
+import androidx.fragment.app.viewModels
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.databinding.DataBindingUtil
+import com.bumptech.glide.Glide
+import com.bumptech.glide.load.engine.GlideException
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners
+import com.bumptech.glide.request.RequestListener
+import com.bumptech.glide.request.target.Target
+import com.bumptech.glide.load.DataSource
+import com.example.firstapp.R
+import com.example.firstapp.databinding.FragmentMemberInfoCardBinding
+
+class MemberInfoCardFragment : Fragment() {
+
+
+    companion object {
+        fun newInstance() = MemberInfoCardFragment()
+    }
+
+    private val viewModel: MemberInfoCardViewModel by viewModels()
+
+    // 绑定变量
+    private var _binding: FragmentMemberInfoCardBinding? = null
+    private val binding get() = _binding!!
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+        // 使用 DataBindingUtil.inflate 来绑定布局
+        _binding = FragmentMemberInfoCardBinding.inflate(inflater, container, false)
+        binding.viewModel = viewModel
+        binding.lifecycleOwner = this
+
+        // 绑定头像
+
+        Glide.with(this)
+            .load("http://192.168.1.201:9000/sms/avatar/avatar.jpg")
+            .transform(RoundedCorners(100))  // 设置圆角
+            .error(R.drawable.error_placeholder) // 如果加载失败,显示占位图
+            .listener(object : RequestListener<Drawable> {
+                override fun onResourceReady(
+                    resource: Drawable?,
+                    model: Any?,
+                    target: Target<Drawable>?,  // 正确使用 Target 作为泛型参数
+                    dataSource: DataSource?,  // 导入正确的 DataSource
+                    isFirstResource: Boolean
+                ): Boolean {
+                    Log.d("Glide", "Image loaded successfully")
+                    return false
+                }
+
+                override fun onLoadFailed(
+                    e: GlideException?,
+                    model: Any?,
+                    target: Target<Drawable>?,  // 正确使用 Target 作为泛型参数
+                    isFirstResource: Boolean
+                ): Boolean {
+                    Log.e("Glide", "Image load failed", e)
+                    return false
+                }
+            })
+            .into(binding.memberAvatarView)
+
+
+        // 绑定会员徽章
+
+        Glide.with(this)
+            .load("http://192.168.1.201:9000/sms/member/vip_no.png")
+            .transform(RoundedCorners(100))  // 设置圆角
+            .error(R.drawable.error_placeholder) // 如果加载失败,显示占位图
+            .listener(object : RequestListener<Drawable> {
+                override fun onResourceReady(
+                    resource: Drawable?,
+                    model: Any?,
+                    target: Target<Drawable>?,  // 正确使用 Target 作为泛型参数
+                    dataSource: DataSource?,  // 导入正确的 DataSource
+                    isFirstResource: Boolean
+                ): Boolean {
+                    Log.d("Glide", "Image loaded successfully")
+                    return false
+                }
+
+                override fun onLoadFailed(
+                    e: GlideException?,
+                    model: Any?,
+                    target: Target<Drawable>?,  // 正确使用 Target 作为泛型参数
+                    isFirstResource: Boolean
+                ): Boolean {
+                    Log.e("Glide", "Image load failed", e)
+                    return false
+                }
+            })
+            .into(binding.memberImageView)
+
+        return binding.root
+    }
+
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        _binding = null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt
new file mode 100644
index 0000000..1530b32
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt
@@ -0,0 +1,23 @@
+package com.example.firstapp.ui.vip
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.launch
+
+class MemberInfoCardViewModel : ViewModel() {
+    // TODO: Implement the ViewModel
+    private val _phoneNumber = MutableStateFlow("18099999999")
+    val phoneNumber: StateFlow<String> = _phoneNumber
+
+    private val _memberStatus = MutableStateFlow("未开通")
+    val memberStatus: StateFlow<String> = _memberStatus
+
+    // 更新数据的方法
+    fun updatePhoneNumber(phoneNumber: String) {
+        viewModelScope.launch {
+            _phoneNumber.value = phoneNumber
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/alipay_shape.xml b/app/src/main/res/drawable/alipay_shape.xml
new file mode 100644
index 0000000..df5109c
--- /dev/null
+++ b/app/src/main/res/drawable/alipay_shape.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#D5EBFF"/>
+    <corners android:radius="30dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/black_button_background.xml b/app/src/main/res/drawable/black_button_background.xml
new file mode 100644
index 0000000..73a1897
--- /dev/null
+++ b/app/src/main/res/drawable/black_button_background.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="5dp" />
+    <solid android:color="#000000" />
+    <padding android:left="10dp" android:right="10dp" android:top="5dp" android:bottom="5dp"/>
+</shape>
diff --git a/app/src/main/res/drawable/checkbox_round.xml b/app/src/main/res/drawable/checkbox_round.xml
new file mode 100644
index 0000000..2f3d2fb
--- /dev/null
+++ b/app/src/main/res/drawable/checkbox_round.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@android:color/transparent" /> <!-- 设置圆形的背景颜色 -->
+    <corners android:radius="300dp" /> <!-- 设置圆角半径为50%来形成圆形 -->
+    <stroke
+        android:color="#6B6A70" android:width="2dp" />     <!-- 设置边框宽度 -->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/checkbox_round_selected.xml b/app/src/main/res/drawable/checkbox_round_selected.xml
new file mode 100644
index 0000000..f3ce711
--- /dev/null
+++ b/app/src/main/res/drawable/checkbox_round_selected.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#FF6200EE" /> <!-- 设置圆形的背景颜色 -->
+    <corners android:radius="300dp"  /> <!-- 设置圆角半径为50%来形成圆形 -->
+    <stroke
+        android:color="#6B6A70" android:width="2dp" />     <!-- 设置边框宽度 -->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dialog_background.xml b/app/src/main/res/drawable/dialog_background.xml
new file mode 100644
index 0000000..530fb77
--- /dev/null
+++ b/app/src/main/res/drawable/dialog_background.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- 圆角 10dp -->
+    <corners android:radius="10dp" />
+
+    <!-- 背景色:黑色 -->
+    <solid android:color="#FFFFFF" />
+
+    <!-- 内边距 -->
+    <padding android:left="10dp"
+        android:top="10dp"
+        android:right="10dp"
+        android:bottom="10dp"/>
+
+    <stroke android:width="0dp" android:color="#FFFFFF"/>
+</shape>
diff --git a/app/src/main/res/drawable/error_placeholder.xml b/app/src/main/res/drawable/error_placeholder.xml
new file mode 100644
index 0000000..c556fa1
--- /dev/null
+++ b/app/src/main/res/drawable/error_placeholder.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="100dp"
+    android:height="100dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#FF6666"
+        android:pathData="M12,2L2,22h20L12,2zM13,18h-2v-2h2v2zm0,-4h-2v-4h2v4z"/>
+</vector>
diff --git a/app/src/main/res/drawable/gold_border_shape.xml b/app/src/main/res/drawable/gold_border_shape.xml
new file mode 100644
index 0000000..b660c93
--- /dev/null
+++ b/app/src/main/res/drawable/gold_border_shape.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@android:color/transparent"/> <!-- 背景透明 -->
+    <stroke android:width="2dp" android:color="#F9EBC6"/> <!-- 金色边框 -->
+    <corners android:radius="16dp"/> <!-- 圆角大小 -->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/gray_border_shape.xml b/app/src/main/res/drawable/gray_border_shape.xml
new file mode 100644
index 0000000..843e22f
--- /dev/null
+++ b/app/src/main/res/drawable/gray_border_shape.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@android:color/transparent"/> <!-- 背景透明 -->
+    <stroke android:width="1dp" android:color="#FFFFFF"/> <!-- 金色边框 -->
+    <corners android:radius="16dp"/> <!-- 圆角大小 -->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_category.xml b/app/src/main/res/drawable/ic_category.xml
new file mode 100644
index 0000000..2c57814
--- /dev/null
+++ b/app/src/main/res/drawable/ic_category.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#00BFFF"
+        android:pathData="M10,6L8.59,7.41 13.17,12 8.59,16.59 10,18l6,-6z"/>
+
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml
new file mode 100644
index 0000000..a9a2051
--- /dev/null
+++ b/app/src/main/res/drawable/ic_check.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#8A5C37"
+        android:strokeWidth="2"
+        android:strokeColor="#8A5C37"
+        android:pathData="M10.29,15.29 4,9 5.41,7.59 10.29,12.47 19.59,3.17 21,4.59 10.29,15.29"/>
+
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_reminder.xml b/app/src/main/res/drawable/ic_reminder.xml
new file mode 100644
index 0000000..310d415
--- /dev/null
+++ b/app/src/main/res/drawable/ic_reminder.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FFD700"
+        android:pathData="M12,1a11,11 0 0,1 0,22a11,11 0 0,1 0,-22zM12,18a2,2 0 0,1 0,4h-2v-4h2zm0,-12a3,3 0 0,0 -3,3v5h6V9a3,3 0 0,0 -3,-3z"/>
+
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_stats.xml b/app/src/main/res/drawable/ic_stats.xml
new file mode 100644
index 0000000..957f134
--- /dev/null
+++ b/app/src/main/res/drawable/ic_stats.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+
+    <path
+        android:fillColor="#FF5733"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,18c-4.42,0 -8 -3.58 -8 -8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z M16,6h-4v10h4V6z"/>
+
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/member_background.xml b/app/src/main/res/drawable/member_background.xml
new file mode 100644
index 0000000..a50c8ba
--- /dev/null
+++ b/app/src/main/res/drawable/member_background.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <gradient
+        android:startColor="#000000"
+        android:endColor="#7A7596"
+        android:angle="90"/>
+</shape>
diff --git a/app/src/main/res/drawable/more_benefit_shape.xml b/app/src/main/res/drawable/more_benefit_shape.xml
new file mode 100644
index 0000000..f305ef0
--- /dev/null
+++ b/app/src/main/res/drawable/more_benefit_shape.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <gradient
+        android:angle="90"
+        android:startColor="#130F27"
+        android:endColor="#15102D"
+        android:type="linear"/>
+    <corners android:radius="30dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/round_red_bg.xml b/app/src/main/res/drawable/round_red_bg.xml
new file mode 100644
index 0000000..8fcd59b
--- /dev/null
+++ b/app/src/main/res/drawable/round_red_bg.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#FD6478"/> <!-- 设置背景颜色 -->
+    <corners android:radius="100dp"/> <!-- 设置圆角半径 -->
+</shape>
diff --git a/app/src/main/res/drawable/round_transition_gray_bg.xml b/app/src/main/res/drawable/round_transition_gray_bg.xml
new file mode 100644
index 0000000..0bcc740
--- /dev/null
+++ b/app/src/main/res/drawable/round_transition_gray_bg.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- 设置透明背景 -->
+    <solid android:color="@android:color/transparent"/>
+    <!-- 设置灰色边框 -->
+    <stroke android:color="#808080" android:width="1dp"/> <!-- 可以调整宽度 -->
+    <!-- 设置圆角 -->
+    <corners android:radius="16dp"/> <!-- 设置圆角半径 -->
+</shape>
diff --git a/app/src/main/res/drawable/wechat_shape.xml b/app/src/main/res/drawable/wechat_shape.xml
new file mode 100644
index 0000000..5c6381a
--- /dev/null
+++ b/app/src/main/res/drawable/wechat_shape.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#E7F8E7"/>
+    <corners android:radius="30dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_vip.xml b/app/src/main/res/layout/activity_vip.xml
new file mode 100644
index 0000000..7db7900
--- /dev/null
+++ b/app/src/main/res/layout/activity_vip.xml
@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
+    tools:context=".activity.VipActivity">
+<androidx.core.widget.NestedScrollView 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"
+    android:fillViewport="true"
+    tools:context=".activity.VipActivity">
+
+    <androidx.coordinatorlayout.widget.CoordinatorLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fitsSystemWindows="true"
+        android:background="@drawable/member_background">
+
+        <!-- 这里是原来CoordinatorLayout中的内容,保持不变 -->
+
+        <com.google.android.material.appbar.AppBarLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:fitsSystemWindows="true"
+            android:background="@android:color/transparent">
+
+            <com.google.android.material.appbar.MaterialToolbar
+                android:id="@+id/toolbar"
+                android:layout_width="match_parent"
+                android:layout_height="?attr/actionBarSize">
+                <!-- 直接在Toolbar中添加TextView -->
+                <ImageView
+                    android:id="@+id/ivBack"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="left"
+                    android:layout_marginStart="16dp"
+                    android:src="@drawable/ic_back" />
+                <TextView
+                    android:id="@+id/tvTitle"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="智信会员"
+                    android:textColor="#FFFFFF"
+                    android:textSize="18sp"
+                    android:layout_gravity="left"
+                    android:layout_marginEnd="16dp" />
+            </com.google.android.material.appbar.MaterialToolbar>
+
+        </com.google.android.material.appbar.AppBarLayout>
+        <!-- 引入MemberInfoCardFragment -->
+        <fragment
+            android:name="com.example.firstapp.ui.vip.MemberInfoCardFragment"
+            android:id="@+id/memberInfoCardFragment"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
+
+        <!-- 滑动框 -->
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recycler_view"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="145dp"
+            android:layout_marginLeft="15dp"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:background="@android:color/transparent" />
+
+
+<!--        会员权益&#45;&#45;动态-->
+        <androidx.constraintlayout.widget.ConstraintLayout
+            xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:app="http://schemas.android.com/apk/res-auto"
+            android:id="@+id/benefit_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="270dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp"
+            android:padding="0dp"
+            android:background="@android:color/transparent"
+            app:cardBackgroundColor="@android:color/transparent"
+            android:foreground="@drawable/gray_border_shape"
+
+            tools:context=".MainActivity">
+                        <!-- 标题 -->
+                        <TextView
+                            android:id="@+id/title_text"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="会员权益"
+                            android:textColor="#8A5C37"
+                            android:textSize="20sp"
+                            android:textStyle="bold"
+                            app:layout_constraintTop_toTopOf="parent"
+                            app:layout_constraintStart_toStartOf="parent"
+                            app:layout_constraintEnd_toEndOf="parent"
+                            app:layout_constraintHorizontal_bias="0.5"
+                            android:layout_marginTop="5dp" />
+
+                        <!-- 分割线 -->
+                        <View
+                            android:id="@+id/divider"
+                            android:layout_width="0dp"
+                            android:layout_height="1dp"
+                            android:background="#615B7F"
+                            app:layout_constraintTop_toBottomOf="@id/title_text"
+                            app:layout_constraintStart_toStartOf="parent"
+                            app:layout_constraintEnd_toEndOf="parent"
+                            android:layout_marginTop="8dp"
+                            android:layout_marginHorizontal="16dp" />
+            <androidx.constraintlayout.widget.ConstraintLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:app="http://schemas.android.com/apk/res-auto"
+                android:id="@+id/dynamicContainer"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="10dp"
+                android:layout_marginTop="0dp"
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toBottomOf="@id/divider"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+
+                />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+<!--        更多权益-->
+
+        <LinearLayout
+            android:id="@+id/more_benefit_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/more_benefit_shape"
+            android:layout_marginTop="480dp"
+            android:layout_marginLeft="13dp"
+            android:layout_marginRight="13dp"
+            android:padding="10dp"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <TextView
+                android:id="@+id/more_benefit_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="更多权益敬请期待"
+                android:textColor="#D5D4DA"
+                android:textStyle="italic|bold"
+                android:textSize="16sp"
+                android:layout_marginBottom="10dp"
+                android:gravity="center"
+                android:layout_gravity="center"/>
+
+            <!-- 第一项 -->
+            <LinearLayout
+                android:layout_width="200dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                android:layout_marginBottom="8dp"
+                >
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_ai_ass_icon"
+                    android:layout_marginEnd="8dp"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="解锁AI语音助手"
+                    android:textColor="#93B7D9"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+            <!-- 第二项 -->
+            <LinearLayout
+                android:layout_width="200dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                android:layout_marginBottom="8dp"
+                >
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_bar_sta"
+                    android:layout_marginEnd="8dp"
+                    />
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="数据智能预测"
+                    android:textColor="#93B7D9"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+            <!-- 第三项 -->
+            <LinearLayout
+                android:layout_width="200dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                android:layout_marginBottom="8dp"
+                >
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_life_insurance"
+                    android:layout_marginEnd="8dp"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="家庭分类共享"
+                    android:textColor="#93B7D9"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="160dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                android:layout_marginBottom="8dp"
+                >
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_more"
+                    android:layout_marginEnd="8dp"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="敬请期待......"
+                    android:textColor="#D6D5DB"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <View
+            android:id="@+id/divider2"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="#646174"
+            app:layout_constraintTop_toBottomOf="@id/more_benefit_layout"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginTop="690dp"
+            android:layout_marginHorizontal="0dp" />
+
+
+
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="30dp"
+            android:layout_marginTop="880dp"
+            >
+
+        </LinearLayout>
+
+
+    </androidx.coordinatorlayout.widget.CoordinatorLayout>
+</androidx.core.widget.NestedScrollView>
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/card_view_fixed"
+        android:layout_width="match_parent"
+        android:layout_height="180dp"
+        android:layout_margin="0dp"
+        android:layout_marginTop="10dp"
+        android:layout_gravity="bottom"
+        app:cardCornerRadius="0dp"
+        app:cardElevation="6dp"
+        android:background="#030308"
+        app:cardBackgroundColor="#030308"
+        android:layout_alignParentBottom="true">
+
+        <LinearLayout
+            android:id="@+id/alipay_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/alipay_shape"
+            android:layout_marginTop="15dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp"
+            android:padding="3dp"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <LinearLayout
+                android:layout_width="250dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                >
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_alipay"
+                    android:layout_marginEnd="8dp"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="确认协议并支付"
+                    android:textColor="#419AE4"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="¥"
+                    android:textColor="#419AE4"
+                    android:textSize="16sp"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="5dp"
+                    android:gravity="start"/>
+
+                <TextView
+                    android:id="@+id/alipay_amount"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="30"
+                    android:textColor="#419AE4"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/wechat_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@drawable/wechat_shape"
+            android:layout_marginTop="60dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp"
+            android:padding="3dp"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <LinearLayout
+                android:layout_width="250dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                >
+
+                <ImageView
+                    android:layout_width="30dp"
+                    android:layout_height="30dp"
+                    android:src="@mipmap/vip_wechat"
+                    android:layout_marginEnd="8dp"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="确认协议并支付"
+                    android:textColor="#77E382"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="¥"
+                    android:textColor="#77E382"
+                    android:textSize="16sp"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="5dp"
+                    android:gravity="start"/>
+
+                <TextView
+                    android:id="@+id/wechat_amount"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="30"
+                    android:textColor="#77E382"
+                    android:textSize="16sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/xieyi_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:color/transparent"
+            android:layout_marginTop="100dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp"
+            android:padding="1dp"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="start"
+                android:baselineAligned="false"
+                >
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="自动续费可随时取消,开通后每月按12元自动续费,可随时取消自动续费"
+                    android:textColor="#A19FA7"
+                    android:textSize="12sp"
+                    android:gravity="start"/>
+            </LinearLayout>
+
+        </LinearLayout>
+
+
+        <LinearLayout
+            android:id="@+id/protocol_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@android:color/transparent"
+            android:layout_marginTop="140dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp"
+            android:padding="1dp"
+            android:orientation="vertical"
+            android:gravity="center">
+
+            <LinearLayout
+                android:layout_width="300dp"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="center_vertical"
+                android:baselineAligned="false"
+                >
+
+                <CheckBox
+                    android:id="@+id/protocol_checkbox"
+                    android:layout_width="20dp"
+                    android:layout_height="20dp"
+                    android:text=""
+                    android:orientation="horizontal"
+                    android:gravity="start"
+                    android:button="@null"
+                    android:background="@drawable/checkbox_round"
+                    />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="已阅读并同意"
+                    android:textColor="#7E5C3C"
+                    android:textSize="14sp"
+                    android:gravity="start"
+                    android:layout_marginLeft="0dp"
+                    android:orientation="horizontal"
+                    />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="《VIP会员服务协议》"
+                    android:textColor="#15759E"
+                    android:textSize="14sp"
+                    android:gravity="start"
+                    android:orientation="horizontal"
+                    />
+            </LinearLayout>
+
+        </LinearLayout>
+
+    </androidx.cardview.widget.CardView>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_vip.xml b/app/src/main/res/layout/content_vip.xml
new file mode 100644
index 0000000..a2d7fbb
--- /dev/null
+++ b/app/src/main/res/layout/content_vip.xml
@@ -0,0 +1,19 @@
+<?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"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+    <fragment
+        android:id="@+id/nav_host_fragment_content_vip"
+        android:name="androidx.navigation.fragment.NavHostFragment"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:defaultNavHost="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:navGraph="@navigation/nav_graph" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml
new file mode 100644
index 0000000..44baecd
--- /dev/null
+++ b/app/src/main/res/layout/fragment_first.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.core.widget.NestedScrollView 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"
+    tools:context=".FirstFragment">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:padding="16dp">
+
+        <Button
+            android:id="@+id/button_first"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/next"
+            app:layout_constraintBottom_toTopOf="@id/textview_first"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/textview_first"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="@string/lorem_ipsum"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/button_first" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.core.widget.NestedScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_member_info_card.xml b/app/src/main/res/layout/fragment_member_info_card.xml
new file mode 100644
index 0000000..5f2d2a6
--- /dev/null
+++ b/app/src/main/res/layout/fragment_member_info_card.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+        <variable
+            name="viewModel"
+            type="com.example.firstapp.ui.vip.MemberInfoCardViewModel"/>
+    </data>
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:context=".ui.vip.MemberInfoCardFragment">
+
+        <!-- CardView 内部的内容 -->
+        <androidx.cardview.widget.CardView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:elevation="2dp"
+            app:cardCornerRadius="10dp">  <!-- 设置CardView的elevation -->
+
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/memberCard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="10dp"
+                tools:ignore="MissingConstraints">
+
+                <ImageView
+                    android:id="@+id/memberAvatarView"
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="10dp"
+                    android:scaleType="centerCrop"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/phoneNumberText"
+                    android:layout_width="120dp"
+                    android:layout_height="40dp"
+                    android:gravity="center"
+                    android:text="@{viewModel.phoneNumber}"
+                    app:layout_constraintStart_toEndOf="@id/memberAvatarView"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+<!--                <TextView-->
+<!--                    android:id="@+id/memberStatus"-->
+<!--                    android:layout_width="match_parent"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:gravity="start"-->
+<!--                    android:text="@{viewModel.memberStatus}"-->
+<!--                    app:layout_constraintStart_toEndOf="@id/memberCard"-->
+<!--                    app:layout_constraintTop_toTopOf="parent" />-->
+
+                <TextView
+                    android:id="@+id/memberStatus"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:gravity="start"
+                    android:text="@{viewModel.memberStatus}"
+                    android:layout_marginLeft="8dp"
+                    android:padding="2dp"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/memberAvatarView" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+        </androidx.cardview.widget.CardView>
+
+        <!-- 悬浮的 ImageView, 位于右侧 -->
+        <ImageView
+            android:id="@+id/memberImageView"
+            android:layout_width="80dp"
+            android:layout_height="80dp"
+            android:layout_marginTop="-10dp"
+            android:layout_marginRight="40dp"
+            android:scaleType="centerCrop"
+            android:layout_gravity="end|top"
+            android:elevation="4dp" />  <!-- 设置memberImageView的elevation,确保它在上层 -->
+
+    </FrameLayout>
+
+</layout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_second.xml b/app/src/main/res/layout/fragment_second.xml
new file mode 100644
index 0000000..d074310
--- /dev/null
+++ b/app/src/main/res/layout/fragment_second.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.core.widget.NestedScrollView 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"
+    tools:context=".SecondFragment">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:padding="16dp">
+
+        <Button
+            android:id="@+id/button_second"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/previous"
+            app:layout_constraintBottom_toTopOf="@id/textview_second"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/textview_second"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:text="@string/lorem_ipsum"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/button_second" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.core.widget.NestedScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card.xml b/app/src/main/res/layout/item_card.xml
new file mode 100644
index 0000000..9728346
--- /dev/null
+++ b/app/src/main/res/layout/item_card.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_margin="8dp"
+    app:cardBackgroundColor="#F0F0F0"
+    app:cardCornerRadius="16dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="16dp">
+
+        <TextView
+            android:id="@+id/tag_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:background="#FF0000"
+            android:text="首月限时特惠"
+            android:textColor="#FFFFFF"
+            android:padding="16dp"
+             />
+
+        <TextView
+            android:id="@+id/title_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="连续包月"
+            android:textSize="18sp"
+            android:textColor="#333333"
+            android:layout_marginTop="8dp" />
+
+        <TextView
+            android:id="@+id/price_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="¥9.9"
+            android:textSize="24sp"
+            android:textColor="#FF0000"
+            android:layout_marginTop="8dp" />
+
+    </LinearLayout>
+
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card_continue_monthly.xml b/app/src/main/res/layout/item_card_continue_monthly.xml
new file mode 100644
index 0000000..6e7cb52
--- /dev/null
+++ b/app/src/main/res/layout/item_card_continue_monthly.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="240dp"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="10dp"
+    android:layout_marginRight="10dp"
+    android:background="@android:color/transparent"
+    app:cardBackgroundColor="@android:color/transparent"
+    app:cardElevation="0dp"
+    app:cardUseCompatPadding="false"
+    >
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/vip_first_month_card_view"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:layout_marginTop="10dp"
+        app:cardCornerRadius="16dp"
+        android:foreground="@drawable/gold_border_shape"
+        app:cardBackgroundColor="@android:color/transparent"
+        app:cardElevation="0dp"
+        app:cardUseCompatPadding="false">
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="5dp"
+            android:paddingStart="15dp"
+            android:background="@android:color/transparent">
+
+            <!-- Title Text -->
+            <TextView
+                android:id="@+id/title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="连续包月"
+                android:textSize="18sp"
+                android:textColor="#F9EBC6"
+
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+
+            <!-- Subtitle Text -->
+            <TextView
+                android:id="@+id/sub_title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="首次开通"
+                android:textSize="10dp"
+                android:textColor="#CCCCCC"
+                android:paddingStart="5dp"
+                android:paddingTop="2dp"
+                android:paddingEnd="5dp"
+                android:paddingBottom="2dp"
+                android:background="@drawable/round_transition_gray_bg"
+                app:layout_constraintTop_toBottomOf="@id/title_text"
+                app:layout_constraintStart_toStartOf="parent"
+                android:layout_marginStart="85dp"
+                android:layout_marginTop="-20dp"
+                />
+
+            <!-- Price Text -->
+            <TextView
+                android:id="@+id/price_text_tag"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="¥"
+                android:textSize="20sp"
+                android:textColor="#F9EBC6"
+                android:layout_marginTop="10dp"
+                android:layout_marginLeft="135dp"
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toBottomOf="@id/sub_title_text"
+                app:layout_constraintStart_toStartOf="parent" />
+            <TextView
+                android:id="@+id/price_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="9.9"
+                android:textSize="30sp"
+                android:textColor="#F9EBC6"
+                android:layout_marginTop="0dp"
+                android:layout_marginLeft="150dp"
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toBottomOf="@id/sub_title_text"
+                app:layout_constraintStart_toStartOf="parent" />
+
+            <!-- Next Price Text -->
+            <TextView
+                android:id="@+id/next_price_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="次月起12元/月"
+                android:textSize="14sp"
+                android:textColor="#CCCCCC"
+                android:layout_marginTop="10dp"
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toBottomOf="@id/title_text"
+                app:layout_constraintStart_toStartOf="parent" />
+
+            <!-- Auto Renew Text -->
+            <TextView
+                android:id="@+id/auto_renew_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="自动续费可随时取消"
+                android:textSize="12sp"
+                android:textColor="#CCCCCC"
+                android:layout_marginTop="4dp"
+                android:background="@android:color/transparent"
+                app:layout_constraintTop_toBottomOf="@id/next_price_text"
+                app:layout_constraintStart_toStartOf="parent" />
+
+<!--            <TextView-->
+<!--                android:id="@+id/auto_renew_text2"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:text="活动须知"-->
+<!--                android:textSize="12sp"-->
+<!--                android:textColor="#CCCCCC"-->
+<!--                android:layout_marginTop="4dp"-->
+<!--                android:background="@android:color/transparent"-->
+<!--                app:layout_constraintTop_toBottomOf="@id/auto_renew_text"-->
+<!--                app:layout_constraintStart_toStartOf="parent" />-->
+<!--            <TextView-->
+<!--                android:id="@+id/auto_renew_text3"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:text=">"-->
+<!--                android:textSize="16sp"-->
+<!--                android:textColor="#CCCCCC"-->
+<!--                android:layout_marginTop="0dp"-->
+<!--                android:background="@android:color/transparent"-->
+<!--                android:layout_marginLeft="60dp"-->
+<!--                app:layout_constraintTop_toBottomOf="@id/auto_renew_text"-->
+<!--                app:layout_constraintStart_toStartOf="parent" />-->
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+</androidx.cardview.widget.CardView>
+    <TextView
+        android:id="@+id/first_month_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="0dp"
+        android:layout_marginRight="5dp"
+        android:scaleType="centerCrop"
+        android:layout_gravity="end|top"
+        android:text="首月限时特惠"
+        android:textColor="#FFFFFF"
+        android:padding="4dp"
+        android:elevation="4dp"
+        android:textSize="10sp"
+        android:background="@drawable/round_red_bg"
+        />
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card_single_month.xml b/app/src/main/res/layout/item_card_single_month.xml
new file mode 100644
index 0000000..739b66c
--- /dev/null
+++ b/app/src/main/res/layout/item_card_single_month.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="160dp"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="10dp"
+    android:layout_marginRight="10dp"
+    android:background="@android:color/transparent"
+    app:cardBackgroundColor="@android:color/transparent"
+    app:cardElevation="0dp"
+    app:cardUseCompatPadding="false"
+    >
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/vip_month_card_view"
+        android:layout_width="160dp"
+        android:layout_height="100dp"
+        android:padding="8dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginEnd="20dp"
+        android:background="@android:color/transparent"
+        android:foreground="@drawable/gray_border_shape"
+        app:cardBackgroundColor="@android:color/transparent"
+        app:cardCornerRadius="16dp"
+        app:cardElevation="0dp"
+        app:cardUseCompatPadding="false">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="20dp"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:padding="5dp">
+
+            <TextView
+                android:id="@+id/single_month_title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
+                android:text="1个月"
+                android:textColor="#F9EBC6"
+                android:textSize="18sp" />
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content">
+                <TextView
+                    android:id="@+id/single_month_price_tag"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:text="¥"
+                    android:textColor="#F9EBC6"
+                    android:textSize="20sp" />
+                <TextView
+                    android:id="@+id/single_month_price_text"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:text="15"
+                    android:textColor="#F9EBC6"
+                    android:textSize="30sp" />
+            </LinearLayout>
+
+        </LinearLayout>
+    </androidx.cardview.widget.CardView>
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_card_yearly.xml b/app/src/main/res/layout/item_card_yearly.xml
new file mode 100644
index 0000000..b7b61fa
--- /dev/null
+++ b/app/src/main/res/layout/item_card_yearly.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="160dp"
+    android:layout_height="wrap_content"
+    android:layout_marginTop="10dp"
+    android:layout_marginRight="10dp"
+    android:background="@android:color/transparent"
+    app:cardBackgroundColor="@android:color/transparent"
+    app:cardElevation="0dp"
+    app:cardUseCompatPadding="false"
+    >
+    <androidx.cardview.widget.CardView
+        android:id="@+id/vip_year_card_view"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        app:cardCornerRadius="16dp"
+        android:foreground="@drawable/gray_border_shape"
+        app:cardBackgroundColor="@android:color/transparent"
+        app:cardElevation="0dp"
+        app:cardUseCompatPadding="false">
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="100dp"
+            android:orientation="vertical"
+            android:gravity="center"
+            android:padding="0dp">
+
+            <TextView
+                android:id="@+id/yearly_title_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="年卡"
+                android:textSize="18sp"
+                android:textColor="#F9EBC6"
+                android:layout_marginTop="8dp"/>
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content">
+                <TextView
+                    android:id="@+id/yearly_price_tag"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="¥"
+                    android:textSize="20sp"
+                    android:textColor="#F9EBC6"
+                    android:layout_marginTop="2dp"/>
+                <TextView
+                    android:id="@+id/yearly_price_text"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="108"
+                    android:textSize="20sp"
+                    android:textColor="#F9EBC6"
+                    android:layout_marginTop="2dp"/>
+                <TextView
+                    android:id="@+id/yearly_price_unit"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="/年"
+                    android:textSize="20sp"
+                    android:textColor="#F9EBC6"
+                    android:layout_marginTop="2dp"/>
+            </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
+            <TextView
+                android:id="@+id/yearly_original_price_tag"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="¥"
+                android:textSize="12sp"
+                android:textColor="#CCCCCC"
+                android:layout_marginTop="2dp"/>
+            <TextView
+                android:id="@+id/yearly_original_price_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="168"
+                android:textSize="12sp"
+                android:textColor="#CCCCCC"
+                android:layout_marginTop="2dp"
+                />
+        </LinearLayout>
+
+    </LinearLayout>
+
+
+</androidx.cardview.widget.CardView>
+
+    <TextView
+        android:id="@+id/discount_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="0dp"
+        android:layout_marginRight="5dp"
+        android:scaleType="centerCrop"
+        android:layout_gravity="end|top"
+        android:text="折合9元/月"
+        android:textColor="#FFFFFF"
+        android:padding="4dp"
+        android:textSize="10sp"
+        android:elevation="4dp"
+        android:background="@drawable/round_red_bg"
+        />
+
+</androidx.cardview.widget.CardView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/vip_protocol_dialog_custom.xml b/app/src/main/res/layout/vip_protocol_dialog_custom.xml
new file mode 100644
index 0000000..94d6cab
--- /dev/null
+++ b/app/src/main/res/layout/vip_protocol_dialog_custom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="300dp"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/dialog_background"
+    android:padding="20dp"
+    android:gravity="center"
+
+    >
+
+    <!-- 标题 -->
+    <TextView
+        android:id="@+id/dialogTitle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="确认开通"
+        android:textSize="20sp"
+        android:textColor="#000000"
+        android:gravity="center"
+        android:paddingBottom="10dp" />
+
+    <!-- 内容 -->
+    <TextView
+        android:id="@+id/dialogMessage"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="请阅读并同意《会员协议》?"
+        android:textSize="16sp"
+        android:textColor="#000000"
+        android:gravity="center"
+        android:paddingBottom="20dp" />
+
+    <!-- 按钮 -->
+    <Button
+        android:id="@+id/btnConfirm"
+        android:layout_width="200dp"
+        android:layout_height="wrap_content"
+        android:text="继续开通"
+        android:textColor="@android:color/white"
+
+        android:backgroundTint="#000000"
+        android:gravity="center" />
+</LinearLayout>
diff --git a/app/src/main/res/layout/vip_protocol_dialog_custom_bak.xml b/app/src/main/res/layout/vip_protocol_dialog_custom_bak.xml
new file mode 100644
index 0000000..e3b23ec
--- /dev/null
+++ b/app/src/main/res/layout/vip_protocol_dialog_custom_bak.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="300dp"
+    android:layout_height="wrap_content"
+    app:cardCornerRadius="10dp"
+    app:cardElevation="5dp"
+    app:cardBackgroundColor="#FFFFFF"
+    android:layout_gravity="center">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="20dp"
+        android:gravity="center">
+
+        <!-- 标题 -->
+        <TextView
+            android:id="@+id/dialogTitle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="确认开通"
+            android:textSize="20sp"
+            android:textColor="#000000"
+            android:gravity="center"
+            android:paddingBottom="10dp" />
+
+        <!-- 内容 -->
+        <TextView
+            android:id="@+id/dialogMessage"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="请阅读并同意《会员协议》?"
+            android:textSize="16sp"
+            android:textColor="#000000"
+            android:gravity="center"
+            android:paddingBottom="20dp" />
+
+        <!-- 按钮 -->
+        <Button
+            android:id="@+id/btnConfirm"
+            android:layout_width="200dp"
+            android:layout_height="wrap_content"
+            android:text="继续开通"
+            android:textColor="@android:color/white"
+            android:backgroundTint="#000000"
+            android:textColorHint="@android:color/black"
+            android:gravity="center" />
+    </LinearLayout>
+
+</androidx.cardview.widget.CardView>
diff --git a/app/src/main/res/mipmap/vip.png b/app/src/main/res/mipmap/vip.png
new file mode 100644
index 0000000..6cdf762
--- /dev/null
+++ b/app/src/main/res/mipmap/vip.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_ad_no.png b/app/src/main/res/mipmap/vip_ad_no.png
new file mode 100644
index 0000000..981fdce
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_ad_no.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_ai_ass_icon.png b/app/src/main/res/mipmap/vip_ai_ass_icon.png
new file mode 100644
index 0000000..a8ec7b9
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_ai_ass_icon.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_alipay.png b/app/src/main/res/mipmap/vip_alipay.png
new file mode 100644
index 0000000..d770490
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_alipay.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_bar_sta.png b/app/src/main/res/mipmap/vip_bar_sta.png
new file mode 100644
index 0000000..77a41cc
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_bar_sta.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_cancel.png b/app/src/main/res/mipmap/vip_cancel.png
new file mode 100644
index 0000000..9fc891d
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_cancel.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_cancel_link.png b/app/src/main/res/mipmap/vip_cancel_link.png
new file mode 100644
index 0000000..1f5f091
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_cancel_link.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_card.png b/app/src/main/res/mipmap/vip_card.png
new file mode 100644
index 0000000..75d9e76
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_card.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_circle_pie.png b/app/src/main/res/mipmap/vip_circle_pie.png
new file mode 100644
index 0000000..94e153d
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_circle_pie.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_copy.png b/app/src/main/res/mipmap/vip_copy.png
new file mode 100644
index 0000000..c6a5e8a
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_copy.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_free_member.png b/app/src/main/res/mipmap/vip_free_member.png
new file mode 100644
index 0000000..d6bd848
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_free_member.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_life_insurance.png b/app/src/main/res/mipmap/vip_life_insurance.png
new file mode 100644
index 0000000..445c54e
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_life_insurance.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_ling.png b/app/src/main/res/mipmap/vip_ling.png
new file mode 100644
index 0000000..3de1c6a
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_ling.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_more.png b/app/src/main/res/mipmap/vip_more.png
new file mode 100644
index 0000000..34dfb7f
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_more.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_no.png b/app/src/main/res/mipmap/vip_no.png
new file mode 100644
index 0000000..e07563a
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_no.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_right.png b/app/src/main/res/mipmap/vip_right.png
new file mode 100644
index 0000000..5d46f9f
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_right.png
Binary files differ
diff --git a/app/src/main/res/mipmap/vip_wechat.png b/app/src/main/res/mipmap/vip_wechat.png
new file mode 100644
index 0000000..d66bbb2
--- /dev/null
+++ b/app/src/main/res/mipmap/vip_wechat.png
Binary files differ
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
new file mode 100644
index 0000000..b22fff5
--- /dev/null
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation 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:id="@+id/nav_graph"
+    app:startDestination="@id/FirstFragment">
+
+    <fragment
+        android:id="@+id/FirstFragment"
+        android:name="com.example.firstapp.activity.FirstFragment"
+        android:label="@string/first_fragment_label"
+        tools:layout="@layout/fragment_first">
+
+        <action
+            android:id="@+id/action_FirstFragment_to_SecondFragment"
+            app:destination="@id/SecondFragment" />
+    </fragment>
+    <fragment
+        android:id="@+id/SecondFragment"
+        android:name="com.example.firstapp.activity.SecondFragment"
+        android:label="@string/second_fragment_label"
+        tools:layout="@layout/fragment_second">
+
+        <action
+            android:id="@+id/action_SecondFragment_to_FirstFragment"
+            app:destination="@id/FirstFragment" />
+    </fragment>
+</navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
new file mode 100644
index 0000000..22d7f00
--- /dev/null
+++ b/app/src/main/res/values-land/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">48dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml
new file mode 100644
index 0000000..d73f4a3
--- /dev/null
+++ b/app/src/main/res/values-w1240dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">200dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml
new file mode 100644
index 0000000..22d7f00
--- /dev/null
+++ b/app/src/main/res/values-w600dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">48dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 29be459..dd87850 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -5,4 +5,5 @@
     <dimen name="list_item_spacing">16dp</dimen>
     <dimen name="list_item_spacing_half">8dp</dimen>
     <dimen name="heatmap_cell_size">12dp</dimen>
+    <dimen name="fab_margin">16dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
index d1689af..f8bbdd2 100644
--- a/app/src/main/res/xml/network_security_config.xml
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -5,6 +5,7 @@
         <domain includeSubdomains="true">192.168.1.213</domain>
         <domain includeSubdomains="true">192.168.1.198</domain>
         <domain includeSubdomains="true">192.168.1.199</domain>
+        <domain includeSubdomains="true">192.168.1.201</domain>
         <!-- 可添加其他域名或IP(如192.168.0.101) -->
 <!--        如果本地服务使用自签名证书,需在 network_security_config.xml 中信任该证书:-->
 <!--        <trust-anchors>-->

--
Gitblit v1.9.3