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

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

相关文章

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

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

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