模拟下载

主界面有个开始下载按钮,点击按钮以后开始模拟下载

界面布局:

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context="com.example.d27.MainActivity" >
10
11     <Button
12         android:id="@+id/button1"
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:layout_alignParentLeft="true"
16         android:layout_alignParentTop="true"
17         android:text="开始下载"
18         android:onClick="onClick" />
19
20 </RelativeLayout>

java部分代码如下:

 1 package com.example.d27;
 2
 3 import android.app.Activity;
 4 import android.app.ProgressDialog;
 5 import android.os.Bundle;
 6 import android.os.Handler;
 7 import android.os.Message;
 8 import android.view.View;
 9 import android.widget.Toast;
10
11 public class MainActivity extends Activity {
12     private ProgressDialog dialog;
13     private Handler handler = new Handler() {
14         public void handleMessage(Message msg) {
15             switch (msg.what) {// 判断消息
16             case 1:
17                 dialog.show();// 显示dialog
18                 break;
19             case 2:
20                 dialog.setMax(msg.arg2);// 设置dialog的最大值
21                 dialog.setProgress(msg.arg1);// 设置进度条
22                 dialog.setMessage("正在下载第" + msg.arg1 + "部分");// 设置内容
23                 break;
24             case 3:
25                 dialog.dismiss();// 不显示dialog
26                 Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT)
27                         .show();// 通知下载完成
28                 break;
29             }
30         };
31     };
32
33     @Override
34     protected void onCreate(Bundle savedInstanceState) {
35         super.onCreate(savedInstanceState);
36         setContentView(R.layout.activity_main);
37         // 初始化dialog
38         initDialog();
39     }
40
41     // 初始化ProgressDialog
42     private void initDialog() {
43         // 创建dialog
44         dialog = new ProgressDialog(this);
45         // 设置dialog的样式为水平
46         dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
47         // 设置图标
48         dialog.setIcon(android.R.drawable.ic_dialog_info);
49         // 设置标题
50         dialog.setTitle("正在下载");
51         // 设置内容
52         dialog.setMessage("");
53         // 设置是否可以取消dialog
54         dialog.setCancelable(false);
55     }
56
57     //开始下载按钮点击事件
58     public void onClick(View view) {
59         // 开启工作线程模拟下载,并发送消息给主线程更新界面
60         new Thread(new Download()).start();
61     }
62
63     class Download implements Runnable {
64
65         @Override
66         public void run() {
67             // 发送消息让主线程显示dialog
68             handler.sendEmptyMessage(1);
69             for (int i = 0; i <= 10; i++) {
70                 // 发送消息让主线程更新进度条
71                 handler.obtainMessage(2, i, 10).sendToTarget();
72                 try {
73                     // 当前线程休眠1秒来模拟下载
74                     Thread.sleep(1000);
75                 } catch (InterruptedException e) {
76                     e.printStackTrace();
77                 }
78             }
79             // 下载完成,发送消息给主线程
80             handler.sendEmptyMessage(3);
81         }
82
83     }
84 }

---恢复内容结束---

时间: 2024-12-07 22:07:26

模拟下载的相关文章

Android群英传笔记系列三 view的自定义:实现一个模拟下载

1.实现效果:动态显示进度(分别显示了整个的动态改变的过程,然后完成后,弹出一个对话框)       2.实现过程:可以分为绘制一个圆,圆弧和文本三部分,然后在MainAcitivity中通过线程模拟下载进度. a.定义一个类继承至view,然后添加其构造函数,记得一定要添加含有Attributset参数的构造函数; b.定义和初始化一些数据: private int mCircleXY; private int mWidth; private float mRadius; private Pa

Android - SimpleAdapter适配器支持的组件及Listview模拟下载

本来这周想写三篇的,结果这第一篇就不知道该如何起笔.语言表达能力真的需要提高啊.其实有好多想写的,最近这几天又接触到了以前听过但是没有去考虑的一些点.这篇的起因曾经做过一道题,我当时很不理解,我看有评论还是很多跟我当时想法一样的,一直没来得及去追究,终于还是放心不下,去看了一下,发现我错了.原题如下: 使用SimpleAdapter作为 ListView的适配器,行布局中支持下列哪些组件? TextView ProgressBar CompoundButton ImageView 当时我毫不犹豫

以下三种下载方式有什么不同?如何用python模拟下载器下载?

问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载的时候 from urllib import request import sys request.urlretrieve('https://i1.pixiv.net/img-zip-ugoira/img/2017/04/05/00/24/41/62259492_ugoira600x600.zip'

通用 模拟下载文件保存方法

起始: 需要使用weiapi 请求外部接口获取文件并保存. 使用方法: 使用 WebRequest 模拟Http请求 获取返回流 . 发现问题: 本地搭建webapi模拟外接口测试时发现,无法获取到webapi返回的文件流. 解决方法: 修改方法.使用httpclient,得到返回的 httpresponsemessage. 经过测试发现,可以兼容各种返回结果. 代码重现: 请求地址的代码: string filePath = "d:333.xls"; try { var stream

iOS Quartz2D模拟下载进度条

效果图: 步骤: 1.在StoryBoard中拖入一个控制器添加UISlider和UIView 2个控件 2.在控制器中连线监听UISlider的值变化事件.HJProgressView属性,把变化的值传递给自定义UIView 3.自定义HJProgressView重写progressValue属性set方法,重绘视图中得文字和弧度值 控制器代码: #import "ViewController.h" #import "HJProgressView.h" @inte

模拟下载进度动画 (动画监听)

//监听事件 -(void)setUpSomething{ UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapped:)];     [self addGestureRecognizer:tapGes]; } //点击动画 #pragma mark -- UITapGesture -(void)tapped:(UITapGestureRec

模拟下载进度条

import time def process(percent, width=30): percent = percent if percent <= 1 else 1 text=('\r[%%-%ds]'%width)%('*'*int(width*percent)) text=text+'%d%%' text=text%(percent*100) print(text,end='') file_size=10240 cur_size=0 while True: time.sleep(0.01

iOS 【Multithreading-多图下载数据展示案例(二级缓存)/模拟SDWebImage内部实现】

#import "ViewController.h" #import "WZYApp.h" @interface ViewController () // 数据模型数组 @property (nonatomic, strong) NSArray *apps; // 保存操作对象的字典 @property (nonatomic, strong) NSMutableDictionary *operations; // 内存缓存 @property (nonatomic,

04 http协议模拟登陆发帖

<?php require('./http.class.php'); $http = new Http('http://home.verycd.com/cp.php?ac=pm&op=send&touid=0&pmid=0'); $http->setHeader('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); $http->setHeader('Accept-E