安卓模拟文件加载进度条

一、场景

      App模拟下载实现自动更新进度条,减少用户等待的焦虑感。

二、实现

      安卓实现一个假的文件下载进度条,文件大小随机生成。假的文件下载进度条可以做成一个自定义控件,在进度加载对话框中显示,App开始进行网络请求弹出进度加载对话框,网络请求完成自动关闭对话框。

 

package com.xp.pro.androiddownlod;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;


public class ProgressBarActivity extends Activity {

        private ProgressBar  progressBar;
        private Button button;
        private TextView tvPercent;
        private TextView tvTotal;
        private Handler handler;
        private int progress = 0;
        private double total = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress_bar);

            progressBar = findViewById(R.id.pb_test);
        button = findViewById(R.id.btn_download);
            tvPercent = findViewById(R.id.tv_percent);
            tvTotal = findViewById(R.id.tv_total);

            //生成1-10以内的随机数
            Random ra =new Random();
            total = ra.nextInt(10)+1;

            tvPercent.setText(progress+"%");
            tvTotal.setText("0M/"+total+"M");
            handler = new Handler(){
                @Override
                public void handleMessage(@NonNull Message msg) {
                    super.handleMessage(msg);
                    switch (msg.what){
                        case 1:
                            if(progress<100)
                            {
                                progressBar.setProgress(progress);
                                tvPercent.setText(progress+"%");
                                tvTotal.setText((total*progress/100)+"M/"+total+"M");
                                progress++;
                                handler.sendEmptyMessageDelayed(1,10);
                                // 模拟耗时的后台计算
                            }else
                            {
                                tvTotal.setText(total+"M/"+total+"M");
                                tvPercent.setText(progress+"%");
                                Toast.makeText(ProgressBarActivity.this,"已下载最新版本",Toast.LENGTH_LONG).show();
                            }
                            break;
                    }
                }
            };
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        handler.sendEmptyMessage(1);
                    }
                });
                thread.start();
            }
        });
    }
}


 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_percent"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:padding="10dp" />

        <TextView
            android:id="@+id/tv_total"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/pb_test"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp" />

    <Button
        android:id="@+id/btn_download"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="下载" />
</LinearLayout>

      后记:有两年时间没写安卓代码,感觉到有一些生疏了。在实际的工作场景中,项目的复杂度要比写个Demo大得多,要考虑代码的耦合和健壮性等等。现在在做业务的时候,偶尔会有一种想要上手撸码的冲动,但我会提醒自己时间精力有限,如果陷入太多的细节,就没有时间去思考业务的提升,无法拓宽视野、修炼全局思维,所以懂技术的产品人需要在理想和现实之前寻求一个合适的平衡点,然后让现实不断逼近理想。


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值