2014-05-04 102 views
0

你好家伙我正在简单的应用程序,它基本上有一个按钮功能,当按下时,显示进度栏,然后切换图像。我有问题,点击该按钮后,该代码立即切换图像。我需要在进度条的末尾切换图像。更改图片和文字后点击

这是我到目前为止的代码:

package com.example.testapp; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class MainActivity extends Activity { 

    ImageView image; 
    Button btnStartProgress; 
    ProgressDialog progressBar; 
    private int progressBarStatus = 0; 
    private Handler progressBarHandler = new Handler(); 

    private long fileSize = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     addListenerOnButton(); 

    } 

    public void addListenerOnButton() { 

     image = (ImageView) findViewById(R.id.imageView1); 
     btnStartProgress = (Button) findViewById(R.id.button1); 
     btnStartProgress.setOnClickListener(
       new OnClickListener() { 

      @Override 
      public void onClick(View v) { 



      progressBar = new ProgressDialog(v.getContext()); 
      progressBar.setCancelable(true); 
      progressBar.setMessage("Scanning ..."); 
      progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      progressBar.setProgress(0); 
      progressBar.setMax(100); 
      progressBar.show(); 


      progressBarStatus = 0; 


      fileSize = 0; 

      new Thread(new Runnable() { 
       public void run() { 

       while (progressBarStatus < 100) { 


        progressBarStatus = doSomeTasks(); 


        try { 
        Thread.sleep(1000); 
        } catch (InterruptedException e) { 
        e.printStackTrace(); 
        } 

        // Update the progress bar 
        progressBarHandler.post(new Runnable() { 
        public void run() { 
         TextView textView = (TextView) findViewById(R.id.textView1); 
         textView.setText("Completed!"); 
         textView.setTextColor(0xFF00FF00); 
         image.setImageResource(R.drawable.yes_small);      
         progressBar.setProgress(progressBarStatus); 
        } 
        }); 
       } 


       if (progressBarStatus >= 100) { 

              try { 
         Thread.sleep(5000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 


        progressBar.dismiss(); 

       } 

       } 
       }).start(); 

       } 

       }); 

     } 


    public int doSomeTasks() { 

     while (fileSize <= 1000000) { 

      fileSize++; 

      if (fileSize == 100000) { 
       return 10; 
      } else if (fileSize == 200000) { 
       return 20; 
      } else if (fileSize == 300000) { 
       return 30; 
      } else if (fileSize == 400000) { 
       return 40; 
      } else if (fileSize == 500000) { 
       return 50; 
      } else if (fileSize == 600000) { 
       return 60; 
      } else if (fileSize == 700000) { 
       return 70; 
      } else if (fileSize == 800000) { 
       return 80; 
      } else if (fileSize == 900000) { 
       return 90; 
      } 


     } 

     return 100; 

    } 

} 
+0

您可以创建自己的AsyncTask子类,然后在onPostExecute()中更新您的图像和文本。我认为这将是一个更好的解决方案为你.http://developer.android.com/reference/android/os/AsyncTask.html – Dyrborg

回答

0

的问题,我怀疑,是在doSomeTasks()逻辑。你正在寻找一些真正特定的尺寸。如果fileSize的大小与if-else阶梯中的任何值不完全匹配,该怎么办?

尝试改变逻辑那里,看看是否有差别:)

0

移动textView.set...代码到if (progressBarStatus >= 100)块。您目前正在将文本更新为“已完成!”每次进度栏更新为任何值时。

+0

我尝试将textView.set ...移动到if(progressBarStatus> = 100),但这是为日食错误:(
我认为可能有公共无效的问题。你认为什么人? – user3307177