【Android初级】如何实现一个“模拟后台下载”的加载效果(附源码)
在Android里面,后台的任务下载功能是非常常用的,比如在APP Store里面下载应用,下载应用时,需要跟用户进行交互,告诉用户当前正在下载以及下载完成等。
今天我将通过使用Android的原生控件 ProgressDialog 来实现一个“模拟后台下载”的效果。实现思路如下:
用户点击按钮,模拟开始下载
显示一个进度框,并修改后台界面上的文字,告知用户当前正在下载、需要等待
开启一个线程,模拟后台下载任务,假设下载需要3秒钟完成,让该线程等待3秒
线程执行完成后,关闭进度框,并更新界面上的文字,告知用户下载完成
源码如下:
1、主Activity
`public class ProgressDialogDemo extends Activity {
private Button button;
private TextView textView;
private ProgressDialog mDialog;
@Override
protected void onCreate(Bundle onSavedInstance) {
super.onCreate(onSavedInstance);
setContentView(R.layout.progress_dialog_demo);
button = findViewById(R.id.buttonProgressDialog);
textView = findViewById(R.id.textView6);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建并显示进度加载框
mDialog = ProgressDialog.show(ProgressDialogDemo.this,
"Please wait..",
"Calculating in the background...",
true);
// 设置文字内容,告诉用户当前正在后台计算
textView.setText("Calculating in the background...");
new Thread() {
@Override
public void run() {
try {
// 模拟耗时的后台计算
sleep(3000);
} catch (InterruptedException e) {
} finally {
// 耗时的后台计算完成,关闭进度框,再次以文字的形式告诉用户
mDialog.dismiss();
refreshTextView();
}
}
}.start();
}
});
}
private void refreshTextView() {
textView.post(new Runnable() {
@Override
public void run() {
// 需要在主线程去重新设置文字
textView.setText("Done with calculating.");
}
});
}
}`
2、布局文件progress_dialog_demo.xml:
`
<TextView
android:paddingTop="20dp"
android:text="This is a progress dialog demo."
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="wrap_content" android:id="@+id/textView6"/>
<Button
android:text="Start Background Calculating"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/buttonProgressDialog"/>
`
3、效果图如下:(注意看后台界面上文字的变化)
不过,这个 ProgressDialog类从Android 8.0开始被废弃了,因为这个类有个缺点是:
该框显示时,用户无法跟应用进行交互。
建议使用 ProgressBar 或者通知 Notification代替,后面会分享 ProgressBar 的使用。
【Android初级】如何实现一个“模拟后台下载”的加载效果(附源码)的更多相关文章
- cesium 入门开发系列矢量瓦片加载展示(附源码下载)
前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 源代 ...
- 使用 SVG 实现一个漂亮的页面预加载效果
今天我们要为您展示如何使用 CSS 动画, SVG 和 JavaScript 创建一个简单的页面预加载效果.对于网站来说,这些预载入得画面提供了一种创造性的方法,使用户在等待内容加载的时候不会那么无聊 ...
- cesium 实现风场图效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)
项目地址https://github.com/979451341/Myijkplayer 前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都 ...
- Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)
http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Andr ...
- 一个基于jQuery写的弹窗效果(附源码)
最近项目中频繁遇到需要弹出窗口的功能,一直使用浏览器默认的Alert和Confirm弹窗,感觉视觉效果不是那么好,而从网上下载的话又找不到合适的,找到的话有些也是十分臃肿,有时候感觉学习配置的功夫自己 ...
- cesium1.65api版本贴地贴模型标绘工具效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- openlayers6实现webgl点图层渲染效果(附源码下载)
前言:openlayers6推出来的有一段时间,推出来的新特性见:https://github.com/openlayers/openlayers/releases/该版本的主要功能是能够组合具有不同 ...
- cesium1.63.1api版本贴地贴模型量算工具效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材.不少 ...
随机推荐
- 搜索引擎优化(SEO)解决方案
搜索引擎优化(SEO)解决方案 在此之前,希望大家能重新审视搜索引擎,通俗来讲就是我们日常所用的百度.谷歌.搜狗.雅虎等.磨刀不误砍柴工,知己知彼,百战不殆! 一.搜索引擎是什么? 搜索引擎(Se ...
- 区块链从零开始做开发(0):hyperledger Fabric2.3安装
一.前言 各位看官好,这是本人第一篇技术博客. 写博客的契机是因为原来配的环境在虚拟机扩容后莫名奇妙崩了(具体情况我以后会写),为了以后的自己特此从头开始记录.以前都是作为一个读者,这次终于有机会能够 ...
- 回车禁止form提交表单
今天遇到回车自动提交表单特此记录下 document.getElementsByTagName('form')[0].onkeydown = function(e) { var e = e || ev ...
- Nginx压力测试问题
[root@aa~]# This is ApacheBench, Version 2.3 <Revision:655654Revision:655654> Copyright 1996 A ...
- Docker容器技术--自定义网桥后的默认网卡名称
新建docker虚拟网络命令 这里以172.18.0.1为例,名字为clusterdocker network create --subnet=172.18.0.0/16 cluster 当我们想新建 ...
- github与svn的区别
github与svn都属于版本控件系统,但是两者不同于,github是分布式的,svn不是分布的是属于集中式的. 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点,上手会很容 ...
- 为什么Elasticsearch不适合做数据存储?(转学习使用)
一.问题描述 公司想尝试使用Elasticsearch来存一部分数据,以此缓解数据增长带来的对数据库的压力.在研究了一段时间后,发现Elasticsearch不适合作为数据存储使用. 二.理由如下 1 ...
- Elasticsearch java api操作(一)(Java Low Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- 并发编程--锁--Lock和Synchronized
说说对于 synchronized 关键字的了解? synchronized关键字解决的是多个线程之间访问资源的同步性: synchronized 关键字可以保证被它修饰的方法或者代码块在任意时刻只能 ...
- Linux下MiniGUI库的安装
Linux下MiniGUI库的安装 今天试了下安装MiniGUI的库 先仿照官网的教程安装 传送门:MiniGUI官网 一.配置依赖环境 安装构建工具 apt install binutils aut ...