Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。
效果图:
实现代码:
<?xml version="1.0" encoding="utf-8"?> <layout> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/wc_base_bg"> <TextView android:id="@+id/qr_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="二维码名片" android:textSize="22sp" android:textColor="@color/black" android:layout_marginTop="10dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="340dp" android:layout_height="440dp" android:padding="20dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/qr_title" app:layout_constraintBottom_toBottomOf="parent" android:background="@color/white"> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/qr_avatar" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/wc_base_icon"/> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/qr_name" app:layout_constraintStart_toEndOf="@+id/qr_avatar" app:layout_constraintTop_toTopOf="@+id/qr_avatar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginStart="20dp" android:textSize="20sp" android:textStyle="bold" android:textColor="@color/black" android:text=""/> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/qr_result" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/qr_avatar" app:layout_constraintBottom_toBottomOf="parent" android:layout_width="300dp" android:layout_height="300dp"/> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
/** * Author : wangning * Email : maoning20080809@163.com * Date : 2022/4/21 16:32 * Description : 生成二维码名片 */ class QRFragment : BaseDataBindingFragment<WcFragmentPersonalQrBinding>(){ override fun getLayoutRes() = R.layout.wc_fragment_personal_qr private val userViewModel : UserViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) var account = DataStoreUtils.getAccount() userViewModel.getUserLocal(account) userViewModel.userBeanLocal.observe(viewLifecycleOwner){ qr_name.text = it.nickName var avatarUrl = CommonUtils.Base.getReallyImage(it.avatar) GlideUtils.load(qr_avatar, avatarUrl) var qrCode = CommonUtils.QRCommon.QR_ADD_FRIEND + account+"###"+it.nickName+"###"+it.avatar if(!CommonUtils.Base.isJpg(avatarUrl)){ //不是jpg等图片 var bitmap = BitmapFactory.decodeResource(WcApp.getContext().resources, R.drawable.wc_avatar_default) processResult(qrCode, bitmap) } else { Glide.with(WcApp.getContext()).asBitmap().load(avatarUrl).into(object : SimpleTarget<Bitmap>(){ override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) { //加载成功 processResult(qrCode, resource) } override fun onLoadFailed(errorDrawable: Drawable?) { super.onLoadFailed(errorDrawable) var bitmap = BitmapFactory.decodeResource(WcApp.getContext().resources, R.drawable.wc_avatar_default) processResult(qrCode, bitmap) } }) } } } private fun processResult(qrCode : String, baseBitmap:Bitmap){ var bitmap = QRUtils.createQRCode(qrCode, 300, 300, baseBitmap) qr_result.setImageBitmap(bitmap) } }