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)
} 

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...