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.mzph.cn/news/24260.shtml

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

相关文章

PictureBox基本使用

作用&#xff1a;展示图片&#xff0c;同时也具有click属性&#xff0c;可用充当按钮功能。 常用属性&#xff1a; 设置图片 设置图片的填充模式 常用事件&#xff1a; 后台代码示范&#xff1a;增加点击事件 private void pictureBox1_Click(object sender, EventArgs e){//…

【CodeWhisperer】亚马逊版代码生成工具

大家好&#xff0c;我是荷逸&#xff0c;今天给大家带来的是代码生成工具【CodeWhisperer】 CodeWhisperer简介 CodeWhisperer是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 在编写代码时&#xff0c;它会自动根据我们现有的代码和注释生…

Java中「Future」接口详解

一、背景 在系统中&#xff0c;异步执行任务&#xff0c;是很常见的功能逻辑&#xff0c;但是在不同的场景中&#xff0c;又存在很多细节差异&#xff1b; 有的任务只强调「执行过程」&#xff0c;并不需要追溯任务自身的「执行结果」&#xff0c;这里并不是指对系统和业务产…

JDK, JRE和JVM之间的区别和联系

JDK, JRE和JVM是与Java编程语言相关的三个重要的概念&#xff0c;它们分别代表Java Development Kit&#xff08;Java开发工具包&#xff09;、Java Runtime Environment&#xff08;Java运行时环境&#xff09;和Java虚拟机&#xff08;Java Virtual Machine&#xff09;。它们…

大数据课程G2——Hbase的基本架构

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Hbase的基本架构; ⚪ 掌握Hbase的读写流程; ⚪ 掌握Hbase的设计与优化; 一、基本架构 1. HRegion 1. 在HBase中,会将一个表从行键方向上进行切分,切分成1个或者多个HRegion。 …

C#利用自定义特性以及反射,来提大型项目的开发的效率

在大型项目的开发过程中&#xff0c;需要多人协同工作&#xff0c;来加速项目完成进度。 比如一个软件有100个form&#xff0c;分给100个人来写&#xff0c;每个人完成自己的Form.cs的编写之后&#xff0c;要在Mainform调用自己写的Form。 如果按照正常的Form form1 new For…

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

【具身智能】系列论文解读(CoWs on PASTURE VoxPoser Relational Pose Diffusion)

0. My Conclusion CoWs on PASTURE&#xff1a; 擅长零样本的视觉语言对象导航&#xff0c;主要解决了LLM辅助下的任务级动作执行任务VoxPoser&#xff1a; 擅长设计一些未预定义的动作轨迹&#xff0c;主要解决了LLM辅助下的动作轨迹设计任务Relational Pose Diffusion&#…

Packet Tracer - 将路由器连接到 LAN

Packet Tracer - 将路由器连接到 LAN 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 192.168.10.1 255.255.255.0 N/A G0/1 192.168.11.1 255.255.255.0 N/A S0/0/0 (DCE) 209.165.200.225 255.255.255.252 N/A R2 G0/0 10.1.1.1 255.255.255…

概率论与数理统计复习总结3

概率论与数理统计复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《概率论与数理统计》/ 荣腾中主编. — 第 2 版. 高等教育出版社《2024高途考研数学——概率基础精讲》王喆 概率论与数理统计实际上是两个互补的分支&#xff1a;概率论 在 已知随机…

Kernel Exception导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、高温触发 Kernel Exception 重启问题二、解决方案三、提高电池温度方案 一、 高温触发 Kernel Exception 重启问题 手机 电池温度 默认60度以上高温…

CBCGPRibbon 添加背景图片

resource.h中声明资源的ID&#xff1a;ID_RIBBON_BACKIMAGE rc文件中添加png图片路径&#xff1a; ID_RIBBON_BACKIMAGE PNG DISCARDABLE "res\\bkribbon.png" 代码中添加下测&#xff1a; //添加背景图片 m_wndRibbonBar.SetBackgroundImage(ID_RIB…

C语言单链表OJ题(较易)

一、移除链表元素 leetcode链接 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 思路&#xff1a; 正常遍历&#xff0c;找到value的值与题目中相同的结点去fr…

第5集丨Vue 江湖 —— 监视属性/侦听属性

目录 一、基本使用1.1 watch配置监视1.2 vm.$watch动态监视1.3 深度监视(deep watch)1.4 简写形式 二、computed和watch的对比2.1 使用watch实现setTimeout操作2.2 用computed无法实现setTimeout 三、其他注意事项3.1 vue devtools的bug3.2 xxxyyy格式3.3 将window传入data中 V…

机器人开发--富锐雷达介绍

机器人开发--富锐雷达介绍 1 介绍参考 1 介绍 山东富锐光学科技有限公司是一家专注智能感知领域的激光雷达公司&#xff0c;致力于激光雷达前沿技术的开发和应用。 公司已累计完成数亿元融资&#xff0c;依托潍坊光电产业发展基础&#xff0c;自建生产线&#xff0c;达到年产…

LNMP安装

目录 1、LNMP简述&#xff1a; 1.1、概述 1.2、LNMP是一个缩写词&#xff0c;及每个字母的含义 1.3、编译安装与yum安装差异 1.4、编译安装的优点 2、通过LNMP创建论坛 2.1、 安装nginx服务 2.1.1、关闭防火墙 2.1.2、创建运行用户 2.1.3、 编译安装 2.1.4、 优化路…

Portraiture 4.0.3 for windows/Mac简体中文版(ps人像磨皮滤镜插件)

Imagenomic Portraiture系列插件作为PS磨皮美白必备插件&#xff0c;可以说是最强&#xff0c;今天它更新到了4.0.3版本。但是全网都没有汉化包&#xff0c;经过几个日夜汉化&#xff0c;终于汉化完成可能是全网首个Portraiture 4的汉化包&#xff0c;请大家体验&#xff0c;有…

展示Streamlit文本魔力(六):从头顶到脚尖

文章目录 1 前言✨2 st.markdown - 引入丰富的Markdown文本3 st.title - 引入引人注目的大标题4 st.header - 引入简洁的小标题5 st.subheader - 添加次级标题6 st.caption - 添加解释性文字7 st.code - 显示代码块8 st.text - 显示文本9 st.latex - 显示LaTeX公式10 st.divide…

【JAVA】 javaSE中的数组|数组的概念使用

数组的概念 什么是Java中的数组 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。在java中&#xff0c;包含6个整形类型元素的数组&#xff0c;可以看做是酒店中连续的6个房间. 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3…

2023年第四届“华数杯”数学建模思路 - 案例:粒子群算法

# 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Particle Swarm Optimization,PSO&#xff09;是一种模仿鸟群、鱼群觅食行为发展起来的一种进化算…