Android 实现账号诊断动画效果,逐条检测对应的项目

Dialog中的项目 逐条检测效果:
在这里插入图片描述

依赖库:

implementation 'com.github.li-xiaojun:XPopup:2.9.19'
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.10'

1、item_account_check.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_marginTop="@dimen/dp_10"android:layout_height="@dimen/dp_52"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginEnd="@dimen/dp_10"android:layout_toStartOf="@id/iv_state"android:layout_alignParentStart="true"android:ellipsize="end"android:singleLine="true"android:textColor="@color/gray_333"android:textSize="@dimen/sp_28"tools:text="@string/app_name" /><ImageViewandroid:id="@+id/iv_state"android:layout_width="@dimen/dp_40"android:layout_height="@dimen/dp_40"android:layout_alignParentEnd="true"android:layout_centerVertical="true"tools:src="@mipmap/ic_launcher" />
</RelativeLayout>

2、实体类

data class CheckResultInfo(val text: String,val value: String,var checkState: Int = -1// 检测状态:0 未检测;1检测中;2已检测
)

3、AccountCheckAdapter .kt

open class AccountCheckAdapter : BaseQuickAdapter<CheckResultInfo, BaseViewHolder?>(R.layout.item_account_check) {override fun convert(helper: BaseViewHolder, item: CheckResultInfo) {try {val tvWord = helper.getView<TextView>(R.id.tv_title)tvWord.text = item.textval ivState = helper.getView<ImageView>(R.id.iv_state)if (item.checkState < 1) {// 未诊断ivState.isVisible = false} else if (item.checkState == 1) {// 正在诊断ivState.isVisible = trueImageLoader.loadUrl(mContext, R.mipmap.ic_item_checking, ivState)tvWord.typeface = Typeface.defaultFromStyle(Typeface.BOLD)tvWord.setTextSize(TypedValue.COMPLEX_UNIT_PX, mContext.resources.getDimension(R.dimen.sp_32))} else if (item.checkState == 2) {// 已诊断ivState.isVisible = trueImageLoader.loadUrl(mContext, R.mipmap.ic_item_checked, ivState)tvWord.typeface = Typeface.DEFAULT_BOLDtvWord.setTextSize(TypedValue.COMPLEX_UNIT_PX, mContext.resources.getDimension(R.dimen.sp_28))}} catch (e: Exception) {e.printStackTrace()}}
}

4、dialog_account_check.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/transparent"android:gravity="center"android:orientation="vertical"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/shape_white_radius_24"android:orientation="vertical"><ImageViewandroid:layout_width="@dimen/dp_220"android:layout_height="@dimen/dp_220"android:layout_gravity="center_horizontal"android:layout_marginTop="@dimen/dp_40"android:scaleType="centerCrop"android:src="@mipmap/ic_account_checking" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_list"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginHorizontal="@dimen/dp_115"android:layout_marginTop="@dimen/dp_24"android:layout_marginBottom="@dimen/dp_60"tools:listitem="@layout/item_account_check" /></androidx.appcompat.widget.LinearLayoutCompat><ImageViewandroid:id="@+id/iv_close"android:layout_width="@dimen/dp_72"android:layout_height="@dimen/dp_72"android:layout_marginTop="@dimen/dp_35"android:src="@mipmap/ic_close_dialog" /></androidx.appcompat.widget.LinearLayoutCompat>

5、AccountCheckDialog.kt

/*** 账号诊断*/
class AccountCheckDialog(mContext: Context,private val dataList: List<CheckResultInfo>,private val checkedCallback: (() -> Unit)? = null,
) : CenterPopupView(mContext) {private lateinit var checkAdapter: AccountCheckAdapterprivate val checkTime = 1500Lprivate val MSG_WHAT = 1000override fun getImplLayoutId(): Int {return R.layout.dialog_account_check}override fun onCreate() {super.onCreate()initListener()startCheck()}private fun initListener() {val rvList = findViewById<RecyclerView>(R.id.rv_list)val ivClose = findViewById<ImageView>(R.id.iv_close)with(rvList) {layoutManager = LinearLayoutManager(context)checkAdapter = AccountCheckAdapter()adapter = checkAdaptercheckAdapter.setNewData(dataList)}com.jr.libbase.extension.setOnClickListener(ivClose) {when (this) {ivClose -> {mHandler.removeCallbacksAndMessages(null)dismiss()}}}}private fun startCheck() {val currentPos = 0checkAdapter.data[currentPos].checkState = 1checkAdapter.notifyItemChanged(currentPos)mHandler.sendMessageDelayed(Message().apply {what = MSG_WHATarg1 = currentPos}, checkTime)}private val mHandler = MyHandler(this)private class MyHandler(dialog: AccountCheckDialog?) : Handler() {//弱引用持有HandlerActivity , GC 回收时会被回收掉private val weakReference: WeakReference<AccountCheckDialog?>init {weakReference = WeakReference<AccountCheckDialog?>(dialog)}override fun handleMessage(msg: Message) {super.handleMessage(msg)val mDialog: AccountCheckDialog = weakReference.get() ?: returnwhen (msg.what) {mDialog.MSG_WHAT -> {try {var position = msg.arg1Log.d("caowj", "dialog position=$position")if (position < mDialog.dataList.size) {mDialog.checkAdapter.data[position].checkState = 2mDialog.checkAdapter.notifyItemChanged(position)position += 1if (position <= mDialog.dataList.size - 1) {mDialog.checkAdapter.data[position].checkState = 1mDialog.checkAdapter.notifyItemChanged(position)sendMessageDelayed(Message().apply {what = mDialog.MSG_WHATarg1 = position}, mDialog.checkTime)}else{mDialog.checkedCallback?.invoke()mDialog.dismiss()}}} catch (e: Exception) {e.printStackTrace()}}}}}
}

6、使用Dialog:

    /*** 账号诊断Dialog*/private fun showCheckingDialog(list: List<CheckResultInfo>) {XPopup.Builder(context).isDestroyOnDismiss(true).dismissOnBackPressed(false).dismissOnTouchOutside(false).asCustom(AccountCheckDialog(requireContext(), list, checkedCallback = {Log.d("caowj", "账号诊断完成,查看检测报告")})).show()}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/54922.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPv6地址分类,EUI-64转换规则

1、可聚合的单全球单播地址Global Unique Address&#xff1a; Aggregate global unicast address&#xff0c;前3位是001&#xff0c;即2000::/3&#xff0c;目前IANA已经将一部分可聚合全球单播进行了专门使用&#xff0c;如&#xff1a;2001::/16用于IPV6互联网&#xff0c;…

【计算机网络】网络基础(上)

文章目录 1. 网络发展认识协议 2.网络协议初识协议分层OSI七层模型 | TCP/IP网络传输基本流程情况1&#xff1a;同一个局域网(子网)数据在两台通信机器中如何流转协议报头的理解局域网通信原理(故事版本)一般原理数据碰撞结论 情况2&#xff1a;跨一个路由器的两个子网IP地址与…

Maven介绍-下载-安装-使用-基础知识

Maven介绍-下载-安装-使用-基础知识 Maven的进阶高级用法可查看这篇文章&#xff1a; Maven分模块-继承-聚合-私服的高级用法 文章目录 Maven介绍-下载-安装-使用-基础知识01. Maven1.1 初识Maven1.1.1 什么是Maven1.1.2 Maven的作用 02. Maven概述2.1 Maven介绍2.2 Maven模型…

将Visio和Excel导出成没有白边的PDF文件

1、VISIO如何无白边导出pdf格式 在使用Latex时&#xff0c;要导入矢量图eps格式。但是VISIO无法输出eps格式&#xff0c;这就需要将其导出为pdf。但是导出pdf时&#xff0c;往往会有大量的白边。VISIO无白边导出pdf格式的方法如下&#xff1a; 1.文件——开发工具——显示sha…

第20节 R语言医学分析:某保险医疗事故赔偿因素分析

文章目录 某保险医疗事故赔偿因素分析源码源文件下载某保险医疗事故赔偿因素分析 我们分析数据集“诉讼”的第一个方法是确定样本数量、变量类型、缩放/编码约定(如果有)用于验证数据清理。 接下来,数据集看起来很干净,没有缺失值,并且对于分类变量,将编码约定替换为实际…

ruoyi若依 组织架构设计--[ 角色管理 ]

ruoyi若依 组织架构设计--[ 角色管理 ] 角色新增后端代码 角色修改后端代码 角色查询角色删除角色分配数据权限后端代码 角色分配用户 角色新增 后端代码 有一点&#xff0c;我认为新增的时候&#xff0c;也需要修改redis中的权限。 角色修改 后端代码 因为修改了role_menu表了…

Python初刷题笔记

目录 保留小数的方法&#xff1a;​编辑 进制问题如何转换&#xff1a; 大小写如何转换&#xff1a; 删除空格问题&#xff1a; 循环输入的简便方法&#xff1a; 截取某一部分所需要的函数&#xff1a; 字符串处理常用函数小汇总&#xff1a; sort和sorted函数的区别&am…

【MongoDB】初识、安装MongoDB

目录 一、MongoDB主要应用场景 二、MongoDB简介 三、MongoDB相关特点 四、MongoDB的安装 一、MongoDB主要应用场景 传统的数据库如MySQL在应对三高场景时显得力不从心 三高&#xff1a; High performance 对数据库高并发读写的需求 High Storage 对海量数据的高效率存储和 …

一 关于idea如何在svn进行项目下载并运行成功

安装svn客户端 如图 安装时请选择该选项&#xff08;Will be installed on local hard drive&#xff09;并选择自己想要安装的目录路径 如图 svn安装成功 如图 注意 安装完成后&#xff0c;使用svn进行一次checkout的项目导出完成以上五步时&…

使用hexo进行博客迁移

本文不会从0开始介绍如何通过hexo去搭建一个github page。因为最近折腾了下&#xff0c;发现这玩意儿确实写个博客很费劲&#xff0c;打算把他拖管到github当作我的知识库网站&#xff0c;我的主要文章还是通过mweb写完一键发布到博客园&#xff0c;然后csdn记录一些杂文和思考…

JMeter测试工具总结

一、JMeter简介 JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架灵活、多平台支持等优势。Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;也可以直接使用Jmeter工具来完成对…

C# 根据图片的EXIF自动调整图片方向

PropertyItems 代码 /// <summary>/// 根据图片exif调整方向/// </summary>/// <param name"img"></param>public void RotateImage(Bitmap img){var exif img.PropertyItems;byte orien 0;var item exif.Where(m > m.Id 274).ToArra…