Android 如何创建带有百分比进度条的启动屏幕?

Android 如何创建带有百分比进度条的启动屏幕?,android,Android,我想在开始时通过进度条显示我的应用程序的启动屏幕,其中包含应用程序的actualload% 我有以下要求/疑问- 我应该使用哪个组件来显示进度条 如果启动屏幕本身是应用程序的一部分,如何计算%负载 触摸启动屏幕时,我想突出显示进度条 您可以创建线程,也可以使用异步任务和创建自定义进度条 asynctask示例(仅伪代码) 私有类SplashLoading扩展了异步任务{ @凌驾 受保护的void onPreExecute(变量){ 在此处显示进度UI } @凌驾 受保护的长DOIN背景(可变){

我想在开始时通过进度条显示我的应用程序的启动屏幕,其中包含应用程序的
actual
load%

我有以下要求/疑问-

  • 我应该使用哪个组件来显示进度条
  • 如果启动屏幕本身是应用程序的一部分,如何计算%负载
  • 触摸启动屏幕时,我想突出显示进度条

  • 您可以创建线程,也可以使用异步任务和创建自定义进度条

    asynctask示例(仅伪代码)

    私有类SplashLoading扩展了异步任务{
    @凌驾
    受保护的void onPreExecute(变量){
    在此处显示进度UI
    }
    @凌驾
    受保护的长DOIN背景(可变){
    在这里完成繁重的任务,别忘了公布进度
    }
    @凌驾
    受保护的void onProgressUpdate(变量){
    在这里设置进度
    }
    @凌驾
    受保护的void onPostExecute(变量){
    完成后你会做什么?
    }
    }
    
    我的asynctask伪代码由4个函数组成

  • 执行任务后,将立即在UI线程上调用onPreExecute。此步骤通常用于设置任务,例如在用户界面中显示进度条

  • onPreExecute()完成执行后,将立即在后台线程上调用doInBackground。此步骤用于执行可能需要很长时间的背景计算

  • 在调用publishProgress(Progress…)后,将在UI线程上调用onProgressUpdate。执行的时间未定义。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可以用于制作进度条动画或在文本字段中显示日志

  • 后台计算完成后,将在UI线程上调用onPostExecute(结果)。背景计算的结果作为参数传递到此步骤


  • 您还可以添加onCancelled(),以防您想在任务取消时处理该问题,请尝试以下方法:我尝试了此方法,此方法没有错误

    /**
     * Async class to get News
     * 
     */
    protected class AsynchTask extends AsyncTask<Void, Integer, Integer> {
    
        @Override
        protected void onPreExecute() {
    
        }
    
        @Override
        protected Integer doInBackground(Void... args) {
    
            download();
    
            return 1;
        }
    
        private void download() {
            // We are just imitating some process thats takes a bit of time
            // (loading of resources / downloading)
            int count = 10;
            for (int i = 0; i < count; i++) {
    
                // Update the progress bar after every step
                int progress = (int) ((i / (float) count) * 100);
                publishProgress(progress);
    
                // Do some long loading things
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException ignore) {
                }
            }
    
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            progressBar1.setProgress(values[0]);
        }
    
        @Override
        protected void onPostExecute(Integer a) {
            progressBar1.setVisibility(View.GONE);
        }
    }
    
    /**
    *获取新闻的异步类
    * 
    */
    受保护的类AsynchTask扩展了AsynchTask{
    @凌驾
    受保护的void onPreExecute(){
    }
    @凌驾
    受保护的整数doInBackground(Void…args){
    下载();
    返回1;
    }
    私有void下载(){
    //我们只是在模仿一些需要一些时间的过程
    //(资源加载/下载)
    整数计数=10;
    for(int i=0;i
    到目前为止你做了些什么?如果你有一个应用程序需要足够长的时间才能加载,你可能会觉得需要一个启动屏幕,你应该重新考虑你的应用程序。首先,当你必须从服务器/网络下载数据时,启动屏幕会被进一步使用到你的应用程序中。并回答您的问题:要显示%负载,您必须知道可以计算和显示进度的总大小(kb/mb)。那么在你的情况下,你在闪屏上做什么呢?解释一下。还是只想显示虚拟的%负载?请解释一下,以便我们能帮忙。谢谢使用异步任务。
    /**
     * Async class to get News
     * 
     */
    protected class AsynchTask extends AsyncTask<Void, Integer, Integer> {
    
        @Override
        protected void onPreExecute() {
    
        }
    
        @Override
        protected Integer doInBackground(Void... args) {
    
            download();
    
            return 1;
        }
    
        private void download() {
            // We are just imitating some process thats takes a bit of time
            // (loading of resources / downloading)
            int count = 10;
            for (int i = 0; i < count; i++) {
    
                // Update the progress bar after every step
                int progress = (int) ((i / (float) count) * 100);
                publishProgress(progress);
    
                // Do some long loading things
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException ignore) {
                }
            }
    
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            progressBar1.setProgress(values[0]);
        }
    
        @Override
        protected void onPostExecute(Integer a) {
            progressBar1.setVisibility(View.GONE);
        }
    }