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

这篇具有很好参考价值的文章主要介绍了Android 实现账号诊断动画效果,逐条检测对应的项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dialog中的项目 逐条检测效果:
Android 实现账号诊断动画效果,逐条检测对应的项目,代码块,android

依赖库:

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">

    <TextView
        android: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" />

    <ImageView
        android: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.text
            val ivState = helper.getView<ImageView>(R.id.iv_state)
            if (item.checkState < 1) {
                // 未诊断
                ivState.isVisible = false
            } else if (item.checkState == 1) {
                // 正在诊断
                ivState.isVisible = true
                ImageLoader.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 = true
                ImageLoader.loadUrl(mContext, R.mipmap.ic_item_checked, ivState)
                tvWord.typeface = Typeface.DEFAULT_BOLD
                tvWord.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.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_white_radius_24"
        android:orientation="vertical">

        <ImageView
            android: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.RecyclerView
            android: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>

    <ImageView
        android: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: AccountCheckAdapter
    private val checkTime = 1500L
    private val MSG_WHAT = 1000

    override 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 = checkAdapter
            checkAdapter.setNewData(dataList)
        }
        com.jr.libbase.extension.setOnClickListener(ivClose) {
            when (this) {
                ivClose -> {
                    mHandler.removeCallbacksAndMessages(null)
                    dismiss()
                }
            }
        }
    }

    private fun startCheck() {
        val currentPos = 0
        checkAdapter.data[currentPos].checkState = 1
        checkAdapter.notifyItemChanged(currentPos)
        mHandler.sendMessageDelayed(Message().apply {
            what = MSG_WHAT
            arg1 = 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() ?: return

            when (msg.what) {
                mDialog.MSG_WHAT -> {
                    try {
                        var position = msg.arg1

                        Log.d("caowj", "dialog position=$position")
                        if (position < mDialog.dataList.size) {
                            mDialog.checkAdapter.data[position].checkState = 2
                            mDialog.checkAdapter.notifyItemChanged(position)
                            position += 1

                            if (position <= mDialog.dataList.size - 1) {
                                mDialog.checkAdapter.data[position].checkState = 1
                                mDialog.checkAdapter.notifyItemChanged(position)

                                sendMessageDelayed(Message().apply {
                                    what = mDialog.MSG_WHAT
                                    arg1 = position
                                }, mDialog.checkTime)
                            }else{
                                mDialog.checkedCallback?.invoke()
                                mDialog.dismiss()
                            }
                        }
                    } catch (e: Exception) {
                        e.printStackTrace()
                    }
                }
            }
        }
    }
}

6、使用Dialog:文章来源地址https://www.toymoban.com/news/detail-632159.html

    /**
     * 账号诊断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()
    }

到了这里,关于Android 实现账号诊断动画效果,逐条检测对应的项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于css实现动画效果

            本文将会基于css,实现各种动画效果,接下来会从简单几个例子入手。 效果 效果展示

    2024年01月23日
    浏览(55)
  • unity实现数字滚动动画效果

    要在 Unity 中实现数字滚动动画效果,你可以使用以下步骤: 创建一个新的 Unity 项目。 在场景中添加一个 UI 文本控件。 在 C# 脚本中,使用 coroutine 实现动画效果。 在每一帧中更新 UI 文本的数字,并通过计算得出下一个数字的位置。 在动画结束后,使用 StopCoroutine 停止动画

    2024年02月10日
    浏览(46)
  • Web 页面如何实现动画效果

    Web 页面可以使用多种方式实现动画效果,其中最常用的有两种: CSS 动画:通过 CSS 中的 transition 和 animation 属性来实现动画效果。CSS 动画实现起来简单,性能消耗小,支持广泛。 JavaScript 动画:通过 JavaScript 代码来实现动画效果。JavaScript 动画实现更加灵活,可以实现更多复

    2024年01月19日
    浏览(51)
  • Vue过渡与动画的实现效果

     使用 transition 标签配合 CSS3 过渡实现【不完整代码】: Vue 还提供了四个 class 类名,分别是进入的起点(v-enter)进入的终点(v-enter-to)离开的起点(v-leave)离开的终点(v-leave-to) 注 :进入的起点 和 离开的起点 就相当于 CSS3 动画里的 from  进入的终点 和 离开的终点 就相

    2024年02月02日
    浏览(38)
  • 两种方法实现小程序动画效果

    在开发小程序时,为了提升用户体验和界面交互效果,动画效果是非常重要的。本文将介绍两种常用的方法来实现小程序的动画效果,并提供相应的源代码示例。 方法一:使用CSS动画 CSS动画是一种简单而有效的实现小程序动画效果的方法。通过CSS样式的变化和过渡效果,可

    2024年02月03日
    浏览(21)
  • CSS3实现动画加载效果

    2024年02月07日
    浏览(54)
  • vue多种实现动画效果分享【推荐学习】

    平时上网我经常能在app或者网页上看到很多比较酷的动画效果,这些效果还是比较吸引人的。那么我们自己在写项目时,也都希望能在页面做出一些很酷的动画效果,页面看起来也会更具特色。所以我总结了一些在vue的项目开发中,我们能够实现动画效果的方法,希望能够帮

    2024年02月09日
    浏览(38)
  • css有哪些动画效果怎么实现的

     css常见的动画效果:平移,缩放,旋转 css实现动画主要有三种方式: transition实现渐变动画 transform实现缩放平移效果动画 animation实现自定义动画   transition实现渐变动画 transform实现缩放平移效果动画  animation实现自定义动画  属性 描述 属性值 animation-name 动画名称 animat

    2024年02月09日
    浏览(48)
  • JavaScript实现背景图像切换3D动画效果

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源

    2023年04月20日
    浏览(52)
  • 利用OpenGL图形库实现人物动画移动效果

    使用OpenGL库实现人物动画移动效果需要涉及到更复杂的图形编程和事件处理。以下是一个简单的例子,使用OpenGL和GLUT库实现人物的基本动画移动效果。 确保你已经安装了OpenGL和GLUT。你可以使用包管理器或者从官方网站下载并安装。 一、如果你已经安装过了OpenGL和GLUT可以直

    2024年01月21日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包