zhujie
2025-03-26 a895ef58396939abd792d1cc2fe6594efa4ffda7
邀请有礼页面
已修改2个文件
已添加9个文件
425 ■■■■■ 文件已修改
app/src/main/AndroidManifest.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/adapter/InvitationAdapter.kt 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/entity/InvitationRecord.kt 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/invitation/LineByLineSmoothScroller.kt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/avatar.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/gift_one.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/rounded_corner_image.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_invitation_main.xml 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_invitation_success.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>