From 879ec1ae04b37eb7bf9357903d10acc860d84d5b Mon Sep 17 00:00:00 2001 From: zhujie <leon.zhu@cloudroam.com.cn> Date: 星期二, 15 四月 2025 03:02:18 +0800 Subject: [PATCH] 1 --- app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt | 92 +++++++++++++++++++++++++++++++++++++++------- 1 files changed, 78 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt b/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt index 55d957f..353707d 100644 --- a/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt +++ b/app/src/main/java/com/example/firstapp/ui/invitation/InvitationActivity.kt @@ -1,13 +1,19 @@ package com.example.firstapp.ui.invitation +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.os.Handler import android.os.Looper import android.text.Html import android.util.TypedValue import android.view.View +import android.widget.Button import android.widget.TextView +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearSmoothScroller @@ -16,6 +22,7 @@ import com.example.firstapp.adapter.InvitationAdapter import com.example.firstapp.adapter.InvitationRecordAdapter import com.example.firstapp.entity.InvitationRecord +import com.example.firstapp.utils.PreferencesManager import kotlin.math.abs class InvitationActivity : AppCompatActivity() { @@ -51,6 +58,26 @@ //启动轮播 startAutoScroll() + + //分享 + val btnInvite = findViewById<Button>(R.id.btnInvite) + btnInvite.setOnClickListener { + shareImageToWechat() + } + + //邀请码 + val invitationCodeText = findViewById<TextView>(R.id.invitationCodeText) + invitationCodeText.text = "A1B2" + //invitationCodeText.text = formatInvitationCode(PreferencesManager.getInviteCode()); + findViewById<Button>(R.id.copyButton).setOnClickListener { + val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + val clip = ClipData.newPlainText( + "邀请码", + invitationCodeText.text.toString().replace(" ", "") // 复制时去掉空格 + ) + clipboard.setPrimaryClip(clip) + Toast.makeText(this, "已复制邀请码", Toast.LENGTH_SHORT).show() + } } private fun initViews() { @@ -64,12 +91,12 @@ addRecordListener() } - private fun addSuccessListener(){ + private fun addSuccessListener() { recyclerSuccessView.viewTreeObserver.addOnGlobalLayoutListener { if (recyclerSuccessView.childCount > 0) { // 计算预期高度(60dp转px) val expectedHeight = dpToPx(60f) - if(itemHeight!= expectedHeight){ + if (itemHeight != expectedHeight) { // 修正所有item的高度 for (i in 0 until recyclerSuccessView.childCount) { recyclerSuccessView.getChildAt(i).layoutParams.height = expectedHeight @@ -106,12 +133,12 @@ } } - private fun addRecordListener(){ + private fun addRecordListener() { recyclerRecordView.viewTreeObserver.addOnGlobalLayoutListener { if (recyclerSuccessView.childCount > 0) { // 计算预期高度(60dp转px) val expectedHeight = dpToPx(60f) - if(itemHeight!= expectedHeight){ + if (itemHeight != expectedHeight) { // 修正所有item的高度 for (i in 0 until recyclerSuccessView.childCount) { recyclerSuccessView.getChildAt(i).layoutParams.height = expectedHeight @@ -184,11 +211,11 @@ data.clear() data.addAll( listOf( - InvitationRecord("H****e", "获得了1天会员","已注册"), - InvitationRecord("U****r", "获得了2天会员","已注册"), - InvitationRecord("A****e", "获得了免广告特权","已注册"), - InvitationRecord("B****e", "获得了3天会员","已注册"), - InvitationRecord("C****o", "获得了4天会员","已注册") + InvitationRecord("H****e", "获得了1天会员", "已注册"), + InvitationRecord("U****r", "获得了2天会员", "已注册"), + InvitationRecord("A****e", "获得了免广告特权", "已注册"), + InvitationRecord("B****e", "获得了3天会员", "已注册"), + InvitationRecord("C****o", "获得了4天会员", "已注册") ) ) adapter.notifyDataSetChanged() @@ -198,14 +225,50 @@ recorddata.clear() recorddata.addAll( listOf( - InvitationRecord("M****e", "","未注册"), - InvitationRecord("Q****r", "","已注册"), - InvitationRecord("W****e", "","未注册"), - InvitationRecord("E****e", "","未注册"), - InvitationRecord("R****o", "","已注册") + InvitationRecord("M****e", "", "未注册"), + InvitationRecord("Q****r", "", "已注册"), + InvitationRecord("W****e", "", "未注册"), + InvitationRecord("E****e", "", "未注册"), + InvitationRecord("R****o", "", "已注册") ) ) recordadapter.notifyDataSetChanged() + } + + // 分享资源图片到微信 + private fun shareImageToWechat() { + try { + // 获取资源图片的URI + val imageUri = Uri.parse("android.resource://${packageName}/${R.drawable.location}") + + val intent = Intent().apply { + action = Intent.ACTION_SEND + type = "image/*" + putExtra(Intent.EXTRA_STREAM, imageUri) + flags = Intent.FLAG_GRANT_READ_URI_PERMISSION + setPackage("com.tencent.mm") // 指定微信包名 + } + + // 创建选择器,即使微信不可用也能选择其他应用 + val chooserIntent = Intent.createChooser(intent, "分享邀请图片") + + // 检查是否有应用能处理这个Intent + if (intent.resolveActivity(packageManager) != null) { + startActivity(chooserIntent) + } else { + Toast.makeText(this, "未找到可分享的应用", Toast.LENGTH_SHORT).show() + } + } catch (e: Exception) { + Toast.makeText(this, "分享失败: ${e.message}", Toast.LENGTH_SHORT).show() + } + } + + private fun formatInvitationCode(code: String): String { + return if (code.length > 2) { + code.chunked(2).joinToString(" ") + } else { + code + } } private val scrollRunnable = object : Runnable { @@ -301,6 +364,7 @@ private fun pxToDp(px: Int, context: Context): Int { return (px / (context.resources.displayMetrics.density)).toInt() } + private fun dpToPx(dp: Float): Int { return (dp * resources.displayMetrics.density).toInt() } -- Gitblit v1.9.3