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

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

相关文章

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字