app/src/main/AndroidManifest.xml
@@ -111,6 +111,9 @@ android:name=".activity.ContentDetailActivity" android:theme="@style/Theme.ContentDetail" android:exported="false" /> <activity android:name=".ui.invitation.InvitationActivity" android:exported="false"/> </application> app/src/main/java/com/example/firstapp/adapter/InvitationAdapter.kt
对比新文件 @@ -0,0 +1,36 @@ package com.example.firstapp.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.example.firstapp.R import com.example.firstapp.entity.InvitationRecord class InvitationAdapter : RecyclerView.Adapter<InvitationAdapter.ViewHolder>() { private var records = emptyList<InvitationRecord>() class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val message: TextView = itemView.findViewById(R.id.message) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context) .inflate(R.layout.activity_invitation_success, parent, false) return ViewHolder(view) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val record = records[position] holder.message.text = "${record.userName}邀请好友,${record.reward}" } override fun getItemCount() = records.size fun submitList(newList: List<InvitationRecord>) { records = newList notifyDataSetChanged() } } app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt
对比新文件 @@ -0,0 +1,6 @@ package com.example.firstapp.entity data class InvitationRecord( val userName: String, val reward: String ) app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt
对比新文件 @@ -0,0 +1,102 @@ package com.example.firstapp.ui.invitation import android.os.Bundle import android.os.Handler import android.os.Looper import android.util.DisplayMetrics import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearSmoothScroller import androidx.recyclerview.widget.RecyclerView import com.example.firstapp.R import com.example.firstapp.adapter.InvitationAdapter import com.example.firstapp.entity.InvitationRecord import java.text.SimpleDateFormat import java.util.Locale import java.util.concurrent.Executors class InvitationActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView private lateinit var adapter: InvitationAdapter private var currentPosition = 0 private val handler = Handler(Looper.getMainLooper()) private lateinit var scrollRunnable: Runnable override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_invitation_main) setupRecyclerView() loadData() setupAutoScroll() } private fun setupRecyclerView() { recyclerView = findViewById(R.id.invitationsuccessRecyclerView) recyclerView.layoutManager = LinearLayoutManager(this).apply { stackFromEnd = false // 从顶部开始布局 } adapter = InvitationAdapter() recyclerView.adapter = adapter } private fun loadData() { val mockData = listOf( InvitationRecord("H****e", "获得了3天会员"), InvitationRecord("U****r", "获得了7天会员"), InvitationRecord("A****e", "获得了免广告特权"), InvitationRecord("B****d", "获得了3天会员"), InvitationRecord("C****o", "获得了7天会员") ) adapter.submitList(mockData) } private fun setupAutoScroll() { scrollRunnable = object : Runnable { override fun run() { if (currentPosition < adapter.itemCount - 1) { currentPosition++ smoothScrollToPosition(currentPosition) } else { // 滚动到底部后回到顶部 currentPosition = 0 recyclerView.scrollToPosition(0) } handler.postDelayed(this, 2000) } } startAutoScroll() } private fun smoothScrollToPosition(position: Int) { val layoutManager = recyclerView.layoutManager as LinearLayoutManager val smoothScroller = object : LinearSmoothScroller(this) { override fun getVerticalSnapPreference(): Int = SNAP_TO_START override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float { return 100f / displayMetrics.densityDpi // 控制滚动速度 } } smoothScroller.targetPosition = position layoutManager.startSmoothScroll(smoothScroller) } private fun startAutoScroll() { handler.postDelayed(scrollRunnable, 2000) } private fun stopAutoScroll() { handler.removeCallbacks(scrollRunnable) } override fun onPause() { super.onPause() stopAutoScroll() } override fun onResume() { super.onResume() startAutoScroll() } } app/src/main/java/com/example/firstapp/ui/invitation/LineByLineSmoothScroller.kt
对比新文件 @@ -0,0 +1,13 @@ import android.content.Context import android.util.DisplayMetrics import androidx.recyclerview.widget.LinearSmoothScroller class LineByLineSmoothScroller(context: Context) : LinearSmoothScroller(context) { override fun calculateSpeedPerPixel(displayMetrics: DisplayMetrics): Float { return 100f / displayMetrics.densityDpi // 控制滚动速度 } override fun getVerticalSnapPreference(): Int { return SNAP_TO_START // 从顶部开始对齐 } } app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
@@ -19,6 +19,7 @@ import com.example.firstapp.activity.ContentDetailActivity import com.example.firstapp.database.service.RetrofitClient import com.example.firstapp.databinding.FragmentNotificationsBinding import com.example.firstapp.ui.invitation.InvitationActivity import com.example.firstapp.ui.reminderOther.ReminderOtherAddActivity2 import com.example.firstapp.ui.reminderOther.ReminderSettingsFragmentOther import kotlinx.coroutines.launch @@ -124,7 +125,8 @@ // 分享给好友 binding.shareToFriends.setOnClickListener { shareToWechat() val intent = Intent(requireActivity(), InvitationActivity::class.java) startActivity(intent) } // 隐私协议 app/src/main/res/drawable/avatar.png
app/src/main/res/drawable/gift_one.png
app/src/main/res/drawable/rounded_corner_image.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="@android:color/transparent" /> <corners android:radius="10dp" /> </shape> app/src/main/res/layout/activity_invitation_main.xml
对比新文件 @@ -0,0 +1,235 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#F0F0F0"> <!-- 标题栏 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="邀请有礼" android:textSize="20sp" android:gravity="center" android:padding="16dp" android:textColor="#333333"/> <!-- 横幅广告区域 --> <ImageView android:layout_width="match_parent" android:layout_height="200dp" android:src="@drawable/gift_one" android:scaleType="fitXY" android:layout_marginBottom="16dp" android:background="@drawable/rounded_corner_image" android:padding="1dp" /> <!-- 邀请成功提示区域 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="#FFFFFF" android:layout_marginBottom="16dp"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/invitationsuccessRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="100dp" android:paddingStart="16dp" android:paddingEnd="16dp" android:paddingBottom="16dp" android:clipToPadding="false" android:overScrollMode="never"/> </LinearLayout> <!-- 邀请按钮区域 --> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="立即邀请好友" android:backgroundTint="#FF0000" android:textColor="#FFFFFF" android:padding="16dp" android:textSize="16sp" android:layout_marginBottom="16dp"/> <!-- 邀请任务表格区域 --> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:background="#FFFFFF" android:layout_marginBottom="16dp"> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邀请人数" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邀请奖励" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="被邀请人奖励" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1人" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3天会员" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1天会员" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3人" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="免广告特权 (7天)" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1天会员" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5人" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7天会员" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1天会员" android:textSize="16sp" android:padding="8dp" android:textColor="#333333"/> </TableRow> </TableLayout> <!-- 邀请记录区域 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp" android:background="#FFFFFF"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的邀请记录" android:textSize="16sp" android:paddingBottom="8dp" android:textColor="#333333"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="8dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hnnnnne" android:textSize="16sp" android:paddingEnd="8dp" android:textColor="#333333"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="待注册" android:background="#CCCCCC" android:textColor="#000000" android:padding="8dp" android:textSize="14sp"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hnnnnne" android:textSize="16sp" android:paddingEnd="8dp" android:textColor="#333333"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="已注册" android:background="#008800" android:textColor="#FFFFFF" android:padding="8dp" android:textSize="14sp"/> </LinearLayout> </LinearLayout> </LinearLayout> app/src/main/res/layout/activity_invitation_success.xml
对比新文件 @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingVertical="16dp"> <ImageView android:id="@+id/avatar" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/avatar"/> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:paddingStart="8dp" android:textColor="#333333"/> </LinearLayout>