自定义动态跳动的三个加载小点

2024-08-31 06:08

本文主要是介绍自定义动态跳动的三个加载小点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说下背景把,最近sdk改版,中间有一个加载框,其实就是显示一串提示字,但是有时需要加载的时间比较长,用户又不能做其他操作,时间久了,感觉界面像卡死一样,不然,其实还在加载,体验非常不好,所以想在文字后边加三个加载的小点不停的跳动。

技术实现方式

  • 写三个字符串,把这段拼接到文字后边,开个handler 间隔一百毫秒换一个,也可以实现,但是有个问题,如果这样的每个页面都要写个handler 去设置它,并且在文字长度是自适应的情况下,会出现ui不停的跳动,因为他在不停的计算textview长度,显然体验不好。
  • 在TextView右边加个图片,需要三张,不停的设置,这样显然没必要啊,就为了这个加图片增加包的大小,不可取。
  • 在TextView后边再加一个textveiw,这个用来显示三个小点,这样也行,但是还是要在代码中去实现一些方法,太麻烦了,有没有更好的办法能,一劳永逸的,当然是有的。
    先说下思路,既然有多个地方调用,又怕麻烦,那就自己定义一个类,自定义一个类继承自TextView,这个自定义的textView专门用来显示三个动态的点,用的时候只要在xml中添加这个类就行了,是不是就比较方便了。废话不多说了,直接上代码。

1.先定义一个资源文件,用于显示字符串

<string name="text_number">%1$s</string>

2.自定义WaitingTextView 继承自TextView

public class WaitingTextView extends TextView {int textNumber;int number = 1;String str;public WaitingTextView(Context context) {super(context);}public WaitingTextView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);textNumber = Utils.getResourceIdByName("R.string.text_number");str=context.getString(textNumber);new UpdateHandler().sendEmptyMessage(0);}class UpdateHandler extends Handler {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int tPosition = msg.what;if (number % 3 == 1) {setText(String.format(str, "."));number++;} else if (number % 3 == 2) {setText(String.format(str, ".."));number++;} else {setText(String.format(str, "..."));number = 1;}this.sendEmptyMessageDelayed(tPosition, 400);}}
}

提醒下Utils.getResourceIdByName(“R.string.text_number”);这句是通过包名获取资源id,主要跨平台用,具体方法就不贴出来了,如果不想用这个可以直接改成:

 context.getResources().getString(R.string.text_number);

到此,控件就定义完了,但是咋用呢,还是贴出来吧。只要把他放在需要显示的控件后边就行了,代码中完全不用写东东。

 < <你的包名>.WaitingTextViewandroid:id="@+id/toast_waiting"android:layout_width="@dimen/dp_15"android:layout_height="wrap_content"android:maxLines="1"android:textSize="@dimen/sp_12" />

当然,还有人说,这样也有点麻烦啊,我要写两个textview,第一个用来显示提示信息的textView 第二个才是显示动态点的,不是也很麻烦么。其实可以再简单一点的,根据自己业务来定,这种情况我们可以自定属性了也可以这样写,看代码:

 class UpdateHandler extends Handler {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int tPosition = msg.what;if (number % 3 == 1) {setText( getText() + String.format(str, "."));number++;} else if (number % 3 == 2) {setText( getText() +String.format(str, ".."));number++;} else {setText( getText() +String.format(str, "..."));number = 1;}this.sendEmptyMessageDelayed(tPosition, 400);}}

这样你只要为自定义WaitingTextView 添加在xml中添加text属性就可以了,一个自定义view就搞定,但是如果你设置了宽度自适应又居中显示的化,注意了,ui会跳,因为长度在变化。

这篇关于自定义动态跳动的三个加载小点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123101

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

SpringBoot加载profile全面解析

《SpringBoot加载profile全面解析》SpringBoot的Profile机制通过多配置文件和注解实现环境隔离,支持开发、测试、生产等不同环境的灵活配置切换,无需修改代码,关键点包括配置文... 目录题目详细答案什么是 Profile配置 Profile使用application-{profil

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到