Kotlin高仿微信-第6篇-主页-我的
创始人
2024-02-27 03:46:43
0

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

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

效果图:

实现代码:





/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/4/21 12:24* Description : 一行通用控件, 左边一个图标, 右边一个箭头, 中间有标题和描述*/
class LineBaseView : LinearLayout {constructor(context:Context) : this(context, null)constructor(context: Context, attributeSet: AttributeSet?) : this(context, attributeSet, 0)constructor(context: Context, attributeSet: AttributeSet? , defStyleAttr : Int) : super(context, attributeSet, defStyleAttr){}var baseView : View? = nullinit {baseView = LayoutInflater.from(context).inflate(R.layout.wc_line_base_view, this)}fun builder() : Builder{return Builder(line_base_left, line_base_right, line_base_title, line_base_content, line_base_root, line_base_dividing)}class Builder(leftImageView : ImageView, rightImageView : ImageView, titleTextView : TextView,contentTextView : TextView, rootView : ConstraintLayout, dividingView : TextView) {private var leftImageView : ImageView = leftImageViewprivate var rightImageView = rightImageViewprivate var titleTextView = titleTextViewprivate var contentTextView = contentTextViewprivate var rootView = rootViewprivate var dividingView = dividingViewfun setLeftImage(resId : Int) : Builder{leftImageView.setImageResource(resId)return this}fun setLeftClick(onClickListener: OnClickListener) : Builder{leftImageView.setOnClickListener(onClickListener)return this}fun hideLeftImage() : Builder {leftImageView.visibility = GONEreturn this}fun setTitle(resId: Int) : Builder {titleTextView.text = WcApp.getContext().resources.getString(resId)return this}fun setTitle(title: String) : Builder {titleTextView.text = titlereturn this}fun setTitleColor(colorId : Int) : Builder {titleTextView.setTextColor(WcApp.getContext().resources.getColor(colorId))return this}fun setTitleSize(size : Float) : Builder{titleTextView.setTextSize(size)return this}fun setContentSize(size : Float) : Builder{contentTextView.setTextSize(size)return this}fun setContentColor(colorId : Int) : Builder {contentTextView.setTextColor(WcApp.getContext().resources.getColor(colorId))return this}fun setContent(resId : Int) : Builder {contentTextView.text = WcApp.getContext().resources.getString(resId)return this}fun setContent(content : String) : Builder {contentTextView.text = contentreturn this}fun hideContent() : Builder{contentTextView.visibility = GONEreturn this}fun showContent() : Builder{contentTextView.visibility = VISIBLEreturn this}fun setRightImage(resId : Int) : Builder{rightImageView.setImageResource(resId)return this}fun setRightClick(onClickListener: OnClickListener) : Builder {rightImageView.setOnClickListener(onClickListener)return this}fun hideRightImage() : Builder {rightImageView.visibility = GONEreturn this}fun setRootClick(onClickListener: OnClickListener) : Builder {rootView.setOnClickListener(onClickListener)return this}fun hideDevideingView() : Builder{dividingView.visibility = View.GONEreturn this}}}

/*** author : wangning* email : maoning20080809@163.com* Date : 2022/4/7 13:12* description : 我的页面*/
class MeFragment : BaseDataBindingFragment() {override fun getLayoutRes()= R.layout.wc_fragment_me//文件存储权限private val REQ_CODE_STORAGE = 1private val userViewModel : UserViewModel by viewModels()override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)initView()me_personal_avatar.setOnClickListener {Navigation.findNavController(it).navigate(R.id.action_me_personal)}//handlePermission()initData()//先判断是否已经注册if(!EventBus.getDefault().isRegistered(this)){EventBus.getDefault().register(this)}}@Subscribe(threadMode = ThreadMode.MAIN)fun onMessageCallback(obj: Any) {if(obj == null){return}if(obj is EventMsgBean){if(obj.type == EventMsgBean.TYPE_REFRESH_USER_NAME){//刷新昵称me_personal_name.text = obj.obj as String} else if(obj.type == EventMsgBean.TYPE_REFRESH_AVATAR){//刷新头像GlideUtils.load(me_personal_img, obj.obj as String)}}}override fun onDestroy() {super.onDestroy()EventBus.getDefault().unregister(this)}fun initView() {//支付me_payment.builder().setLeftImage(R.drawable.me_base_payment).setTitle(BaseUtils.getString(R.string.me_base_payment)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_payment)}/*//收藏me_collection.builder().setLeftImage(R.drawable.me_base_collection).setTitle(BaseUtils.getString(R.string.me_base_collection)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_collection)}*///朋友圈me_moments.builder().setLeftImage(R.drawable.me_base_moments).setTitle(BaseUtils.getString(R.string.me_base_moments)).hideContent().setRootClick {//旧的没实现 navCollection?.navigate(R.id.action_me_moments)Navigation.findNavController(it).navigate(R.id.action_discover_moments)}//扫一扫me_scan.builder().setLeftImage(R.drawable.wc_moments_scan).setTitle(BaseUtils.getString(R.string.me_moments_sanc)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.nav_qrcode_scan)}/*//视频号me_video.builder().setLeftImage(R.drawable.me_base_video).setTitle(BaseUtils.getString(R.string.me_base_video)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_video)}*///卡包/*me_card_bag.builder().setLeftImage(R.drawable.me_base_card_bag).setTitle(BaseUtils.getString(R.string.me_base_card_bag)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_card_bag)}*//*//表情me_expression.builder().setLeftImage(R.drawable.me_base_expression).setTitle(BaseUtils.getString(R.string.me_base_expression)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_expression)}*///设置me_setting.builder().setLeftImage(R.drawable.me_base_setting).setTitle(BaseUtils.getString(R.string.me_base_setting)).hideContent().setRootClick {Navigation.findNavController(it).navigate(R.id.action_me_setting)}}fun initData(){var account = DataStoreUtils.getAccount()userViewModel.getUserLocal(account)userViewModel.userBeanLocal.observe(viewLifecycleOwner){if(it == null) return@observeme_personal_name.text = it.nickNamevar accountResult = getString(R.string.wc_me_show_account, it.account)me_personal_account.text = accountResultGlideUtils.load(me_personal_img, it.getReallyAvatar(), R.drawable.contacts_default_icon)}userViewModel.avatarFilePathLiveData.observe(viewLifecycleOwner){if(!TextUtils.isEmpty(it)){GlideUtils.load(me_personal_img, it)}}}//授权成功,刷新页面fun refresh(){initData()}}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...