zoukankan      html  css  js  c++  java
  • 代码添加ProgressBar 进度条

     

    大家好 今天为大家分享代码中添加ProgressBar的例子 。当我们需要初始化程序或者联网获取数据 在数据库中查找数据时,这些需要耗费些时间的操作就需要进度条来提示用户有任务在进行,以免造成程序界面假死。 为什么要在代码中添加而不在布局里面添加呢,因为在代码里添加可以重复多次利用,免得没用到时就得在布局里添加,麻烦。

        好了,下面我们来做个简单的Demo熟悉一下,

        第一步:首先创建工程ProgressBarInsertLayoutinCode。

        第二步:创建XMl 布局文件  我们就用自动创建的main.xml (在这里面只添加了一个Button)用来启动ProgressBar,代码如下:

     

    1.    <?xml version="1.0" encoding="utf-8"?>  
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3. android:id="@+id/relative"  
    4. android:layout_width="fill_parent"  
    5. android:layout_height="fill_parent"  
    6. >  
    7. <Button android:id="@+id/button"  
    8. android:text="Click me"  
    9. android:layout_width="fill_parent"  
    10. android:layout_height="wrap_content"/>  
    11. </RelativeLayout>  



     

            第三步:修改ProgressBarInsertLayoutinCodeActivity代码,如下:(这里我们用到了Handler和Thread,用来更新ProgressBar的进度,这样就可以到一定是消除ProgressBar)

     

    1. package cn.li.progressbardemo;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5. import android.view.View;  
    6. import android.widget.Button;  
    7.   
    8. public class ProgressBarInsertLayoutinCodeActivity extends Activity {  
    9. /** Called when the activity is first created. */  
    10. private Button btn;  
    11. private InsertProgressBar bar;  
    12. @Override  
    13. public void onCreate(Bundle savedInstanceState) {  
    14. super.onCreate(savedInstanceState);  
    15. setContentView(R.layout.main);  
    16. bar = new InsertProgressBar(ProgressBarInsertLayoutinCodeActivity.this);  
    17. btn = (Button)findViewById(R.id.button);  
    18. btn.setOnClickListener(new View.OnClickListener() {  
    19.   
    20. @Override  
    21. public void onClick(View v) {  
    22. // TODO Auto-generated method stub  
    23. bar.insertBar();  
    24. }  
    25. });  
    26. }  
    27. }  



     

    第四步:创建InsertProgressBar.java 此类创建了ProgressBar

     

    1. package cn.li.progressbardemo;  
    2.   
    3. import android.content.Context;  
    4. import android.os.Handler;  
    5. import android.os.Message;  
    6. import android.view.View;  
    7. import android.widget.ProgressBar;  
    8. import android.widget.RelativeLayout;  
    9. import android.widget.RelativeLayout.LayoutParams;  
    10.   
    11. public class InsertProgressBar {  
    12.   
    13. private RelativeLayout relative ;  
    14. private ProgressBar bar;  
    15. private ProgressBarInsertLayoutinCodeActivity context;  
    16. private int rate = 0;  
    17.   
    18. protected static final int STOP = 0;  
    19. protected static final int NEXT = 1;  
    20.   
    21. public InsertProgressBar(Context c) {  
    22. super();  
    23. context = (ProgressBarInsertLayoutinCodeActivity) c;  
    24. relative = (RelativeLayout)context.findViewById(R.id.relative);  
    25. bar = new ProgressBar(context);  
    26. //设置ProgressBar的高宽和显示位置  
    27. RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
    28. params.getRules()[RelativeLayout.CENTER_IN_PARENT] = RelativeLayout.TRUE;  
    29. bar.setLayoutParams(params);  
    30. }  
    31.   
    32. public void insertBar() {  
    33. bar.setProgress(0);  
    34. //当ProgressBar正在运行时就不再创建ProgressBar  
    35. if(!bar.isShown()){  
    36. bar.setVisibility(View.VISIBLE);  
    37. relative.addView(bar);  
    38. new MyThread().start();  
    39. }  
    40.   
    41. }  
    42.   
    43. class MyThread extends Thread{  
    44.   
    45. @Override  
    46. public void run() {  
    47. super.run();  
    48.   
    49. try {  
    50. for(int i=0;i<25;i++){  
    51. rate = (i+1)*4;  
    52. if(i!=24){  
    53. Message msg = new Message();  
    54. msg.what = NEXT;  
    55. myhandler.sendMessage(msg);  
    56. }else{  
    57. Message msg = new Message();  
    58. msg.what = STOP;  
    59. myhandler.sendMessage(msg);  
    60. }  
    61. MyThread.sleep(200);  
    62. }  
    63. } catch (Exception e) {  
    64. }  
    65.   
    66. }  
    67.   
    68. }  
    69. //创建一个Handle 接收消息  
    70. private Handler myhandler = new Handler(){  
    71.   
    72. @Override  
    73. public void handleMessage(Message msg) {  
    74. super.handleMessage(msg);  
    75. switch (msg.what) {  
    76. case STOP:  
    77. bar.setVisibility(View.GONE);  
    78. relative.removeView(bar);  
    79. Thread.currentThread().interrupt();  
    80. break;  
    81. case NEXT:  
    82. bar.setProgress(rate);  
    83. break;  
    84. }  
    85. }   
    86. };  
    87. }  



     

    OK,运行工程 效果如图

     

  • 相关阅读:
    LeetCode Path Sum II
    LeetCode Longest Palindromic Substring
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Binary Tree Maximum Path Sum
    LeetCode Find Peak Element
    LeetCode Maximum Product Subarray
    LeetCode Intersection of Two Linked Lists
    一天一个设计模式(1)——工厂模式
    PHP迭代器 Iterator
  • 原文地址:https://www.cnblogs.com/firecode/p/2669167.html
Copyright © 2011-2022 走看看