Kotlin高仿微信-第16篇-单聊-红包
创始人
2024-03-04 15:49:38
0

 Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。

Kotlin高仿微信-项目实践58篇,点击查看详情

效果图:

 

 

实现代码:

我的红包页面


好友的红包页面:



/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/5/29 18:09* Description : 红包页面*/
class RedpacketFragment : BaseDataBindingFragment(),MyDispatchTouchEventListener {override fun getLayoutRes() = R.layout.wc_redpacket_mainprivate var navController : NavController? = nullcompanion object {const val REDPACKET_BALANCE = "redpacket_balance"}override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)super.builder().setTitleContent(R.string.wc_base_top_redpacket)navController = findNavController()redpacket_balance.showSoftInputOnFocus = falsenum_keyboard_view.initEditText(redpacket_balance)num_keyboard_view.setRechargeBackground(R.drawable.wc_base_red_selector)num_keyboard_view.setValue(R.string.wc_confirm)num_keyboard_view.visibility = View.GONEredpacket_balance.setOnClickListener {showNumKeyboardView()SoftInputUtils.hideSoftInput(redpacket_greetings)}num_keyboard_item_recharge.setOnClickListener {hideNumKeyboardView()}redpacket_main_root.setOnClickListener {hideNumKeyboardView()SoftInputUtils.hideSoftInput(redpacket_greetings)}redpacket_greetings.setOnClickListener {hideNumKeyboardView()}redpacket_balance.addTextChangedListener(object : TextWatcher{override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {if(TextUtils.isEmpty(s)){redpacket_result_balance.text = ""} else {var balance = s.toString().toFloat()redpacket_result_balance.text = CommonUtils.Base.getFormatBalanceUnit(balance)}}override fun afterTextChanged(s: Editable?) {}})redpacket_ok.setOnClickListener {var balance = redpacket_balance.text?.toString()?.trim()!!if(TextUtils.isEmpty(balance)){ToastUtils.makeText(requireActivity(), "请输入红包金额")} else {TagUtils.d("发送红包:${balance}")if(!UserRepository.judgeBalanceAvailable(balance.toFloat())){ToastUtils.makeText(R.string.wc_payment_balance_available)} else {navController?.previousBackStackEntry?.savedStateHandle?.set(REDPACKET_BALANCE, redpacket_balance.text.toString().toFloat())navController?.popBackStack()}}}}override fun onResume() {super.onResume()redpacket_balance.isFocusableInTouchMode = trueredpacket_balance.requestFocus()redpacket_balance.setOnKeyListener { view, i, keyEvent ->if (i == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {if(num_keyboard_view.visibility == View.VISIBLE){hideNumKeyboardView()true} else {false}} else {false}}}override fun dispatchTouchEvent(ev: MotionEvent) {if (ev.action == MotionEvent.ACTION_DOWN) {if (SoftInputUtils.isInput(rechange_balance, ev)) {num_keyboard_view?.visibility = View.GONE}}}private fun hideNumKeyboardView(){num_keyboard_view.visibility = View.GONE}private fun showNumKeyboardView(){num_keyboard_view.visibility = View.VISIBLE}}
//发送文本、红包、表情
private fun sendMessage(chatBean: ChatBean){if(chatBean == null){ToastUtils.makeText(requireActivity(), "发送信息不能为空")return}var content = chatBean.contentif(TextUtils.isEmpty(content)){ToastUtils.makeText(requireActivity(), "发送信息不能为空")} else {ChatManagerUtils.getInstance().sendMessage(toUserId, content)chat_content.setText("")CoroutineScope(Dispatchers.IO).launch {if(chatBean.contentType == ChatBean.CONTENT_TYPE_REDPACKET){var content = chatBean.contentchatBean.content = CommonUtils.Chat.getRedpacket(content).toString()} else if(chatBean.contentType == ChatBean.CONTENT_TYPE_TRANSFER){var content = chatBean.contentchatBean.content = CommonUtils.Chat.getTransfer(content).toString()}ChatRepository.insertChat(chatBean)}refreshBase(chatBean)}
}/*** 刷新发送、接收聊天信息* @param chatBean ChatBean*/
private fun refreshBase(chatBean: ChatBean){CoroutineScope(Dispatchers.Main).launch {//chatViewModel.insertChat(chatBean)TagUtils.d("ChatFragment refreshBase 刷新聊天信息 ")adapter.refresh(chatBean)if(chatBean.contentType == ChatBean.CONTENT_TYPE_LOCATION){delay(200)}swipe_target.scrollToPosition(adapter.itemCount -1)}
}

插入本地数据库:

fun insertChat(chatBean: ChatBean) : Long {var chatListLocal = getAllChat()if(chatListLocal == null || chatListLocal.size < 1){return WcDatabase.getInstance(WcApp.getContext()).chatDao().insertChat(chatBean)}var resultList = chatListLocal.filter {it.messageId.equals(chatBean.messageId)}//过滤重复数据if(resultList.size > 0){return 0}return WcDatabase.getInstance(WcApp.getContext()).chatDao().insertChat(chatBean)
}

接收红包:

if(content.startsWith(CommonUtils.Chat.REDPACKET_MARK)){//发送红包, 去掉redpacket###写入数据库content = CommonUtils.Chat.getRedpacket(content).toString()var chatBean = CommonUtils.Chat.getChatBean(fromUser, toUser, userType, content, ChatBean.CONTENT_TYPE_REDPACKET, "",0.0, 0.0)ChatRepository.insertChat(chatBean)chatBean.isReceive = trueEventBus.getDefault().post(chatBean)
} 

 

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...