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

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

相关文章

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1