当前位置:   article > 正文

Android实用笔记——使用ProgressBar实现进度条

android progressbar 监听进度

1、ProgressBar的分类

    可以精确显示进度(可以显示刻度或者精确百分比)

222858_jplA_2725918.png

    不可以精确显示精度(一直转,类似于一个过场动画)

222906_s357_2725918.png

 

2、关键属性和方法

    指定ProgressBar显示风格

        style="?android:attr/progressBarStyleLarge"    大环形进度条

        style="?android:attr/progressBarStyleSmall"    小环形进度条

        style="?android:attr/progressBarStyleHorizontal"    水平进度条

    ProgressBar的关键属性

        android:max="100"    最大显示进度

        android:progress="50"    第一显示进度

        android:secondaryProgress="80"    第二显示进度

        android:indenterminate="true"    设置是否精确显示(true表示不精确显示进度,false表示精确显示进度)

    ProgressBar的关键方法

        setProgress(int)    设置第一进度

        setSecondaryProgress(int)    设置第二进度

        setProgress()    获取第一进度

        getSecondaryProgress()    获取第二进度

        incrementProgressBy(int)    增加或减少第一进度

        incrementSecondaryProgressBy(int)    增加或减少第二进度

        getMax()    获取最大进度

 

3、标题栏中的ProgressBar

  1. package com.example.myandroidprogressbar;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.view.Menu;
  5. import android.view.Window;
  6. public class MainActivity extends Activity {
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. //1、启用窗口特征,启用带进度何不带进度的两种进度条
  11. requestWindowFeature(Window.FEATURE_PROGRESS);
  12. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  13. setContentView(R.layout.activity_main);
  14. //显示两种进度条
  15. setProgressBarVisibility(true);
  16. setProgressBarIndeterminateVisibility(true);
  17. //Max=10000
  18. setProgress(600);
  19. }
  20. }

222958_SFgL_2725918.png

    

4、界面中四种不同形式的进度条

    修改activity_main.xml文件如下

  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=".MainActivity" >
  10. <ProgressBar
  11. android:id="@+id/progressBar1"
  12. style="?android:attr/progressBarStyleLarge"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_alignParentLeft="true"
  16. android:layout_alignParentTop="true" />
  17. <ProgressBar
  18. android:id="@+id/progressBar2"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_alignBottom="@+id/progressBar1"
  22. android:layout_toRightOf="@+id/progressBar1" />
  23. <ProgressBar
  24. android:id="@+id/progressBar3"
  25. style="?android:attr/progressBarStyleSmall"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:layout_above="@+id/horiz"
  29. android:layout_toRightOf="@+id/progressBar2" />
  30. <ProgressBar
  31. android:id="@+id/horiz"
  32. style="?android:attr/progressBarStyleHorizontal"
  33. android:layout_width="match_parent"
  34. android:layout_height="wrap_content"
  35. android:layout_alignLeft="@+id/progressBar1"
  36. android:layout_below="@+id/progressBar1"
  37. android:max="100"
  38. android:progress="50"
  39. android:secondaryProgress="80" />
  40. </RelativeLayout>

234312_dSrB_2725918.png

 

5、通过按钮改变进度条的数值并动态改变

    修改activity_main.xml文件

  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=".MainActivity" >
  10. <ProgressBar
  11. android:id="@+id/horiz"
  12. style="?android:attr/progressBarStyleHorizontal"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:max="100"
  16. android:progress="50"
  17. android:secondaryProgress="80" />
  18. <Button
  19. android:id="@+id/add"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_alignLeft="@+id/horiz"
  23. android:layout_below="@+id/horiz"
  24. android:text="@string/add" />
  25. <Button
  26. android:id="@+id/reduce"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_alignRight="@+id/add"
  30. android:layout_below="@+id/add"
  31. android:text="@string/reduce" />
  32. <Button
  33. android:id="@+id/reset"
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:layout_alignLeft="@+id/reduce"
  37. android:layout_below="@+id/reduce"
  38. android:text="@string/reset" />
  39. <TextView
  40. android:id="@+id/text"
  41. android:layout_width="wrap_content"
  42. android:layout_height="wrap_content"
  43. android:layout_alignLeft="@+id/reset"
  44. android:layout_alignRight="@+id/horiz"
  45. android:layout_below="@+id/reset"
  46. android:layout_marginTop="16dp" />
  47. </RelativeLayout>

    修改MainActivity.java文件

  1. package com.example.myandroidprogressbar;
  2. import android.os.Bundle;
  3. import android.R.integer;
  4. import android.app.Activity;
  5. import android.view.Menu;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.Window;
  9. import android.widget.Button;
  10. import android.widget.ProgressBar;
  11. import android.widget.TextView;
  12. public class MainActivity extends Activity implements OnClickListener{
  13. //1、声明部分控件
  14. private ProgressBar progress;
  15. private Button add;
  16. private Button reduce;
  17. private Button reset;
  18. private TextView text;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. //2、初始化控件
  24. init();
  25. }
  26. private void init() {
  27. // TODO Auto-generated method stub
  28. //3、绑定
  29. progress=(ProgressBar) findViewById(R.id.horiz);
  30. add=(Button) findViewById(R.id.add);
  31. reduce=(Button) findViewById(R.id.reduce);
  32. reset=(Button) findViewById(R.id.reset);
  33. text=(TextView) findViewById(R.id.text);
  34. //4、获取各进度条进度
  35. //获取第一进度条的进度
  36. //int first=progress.getProgress();
  37. //湖区第二进度条的进度
  38. //int second=progress.getSecondaryProgress();
  39. //获取进度条的最大进度
  40. //int max=progress.getMax();
  41. //5、将数据显示到textView中
  42. //text.setText("第一进度的百分比:"+(int)(first/(float)max*100)+
  43. //"% 第二进度的百分比:"+(int)(second/(float)max*100)+"%");
  44. add.setOnClickListener(this);
  45. reduce.setOnClickListener(this);
  46. reset.setOnClickListener(this);
  47. }
  48. //6、设置按钮点击响应事件,改变进度条数据
  49. @Override
  50. public void onClick(View v) {
  51. // TODO Auto-generated method stub
  52. switch(v.getId()){
  53. case R.id.add:
  54. //增加第一进度和第二进度10个刻度
  55. progress.incrementProgressBy(10);
  56. progress.incrementSecondaryProgressBy(10);
  57. break;
  58. case R.id.reduce:
  59. //减少第一进度和第二进度10个刻度
  60. progress.incrementProgressBy(-10);
  61. progress.incrementSecondaryProgressBy(-10);
  62. break;
  63. case R.id.reset:
  64. //重置
  65. progress.setProgress(50);
  66. progress.setSecondaryProgress(80);
  67. break;
  68. }
  69. //7、因为每一次点击都会调用onClick这个函数,并且一定会执行switch这个判断。
  70. //所以没必要在每一个分支中刷新textView的内容,只需要在switch分支外面写就好了,
  71. //之前的向textView中写入数据的应该注释掉
  72. text.setText("第一进度的百分比:"+(int)(progress.getProgress()/(float)progress.getMax()*100)+
  73. "% 第二进度的百分比:"+(int)(progress.getSecondaryProgress()/(float)progress.getMax()*100)+"%");
  74. }
  75. }

004203_5c2u_2725918.png

004225_9oeE_2725918.png

004239_TT7J_2725918.png

 

6、对话框形式的进度条(ProgressDialog)

    修改activity_main.xml文件

  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=".MainActivity" >
  10. <Button
  11. android:id="@+id/show"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentTop="true"
  15. android:layout_centerHorizontal="true"
  16. android:layout_marginTop="86dp"
  17. android:text="显示进度条对话框" />
  18. </RelativeLayout>

    修改MainActivity.java文件

  1. package com.example.myandroidprogressdialog;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.app.Dialog;
  5. import android.app.ProgressDialog;
  6. import android.content.DialogInterface;
  7. import android.view.Menu;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.Toast;
  12. public class MainActivity extends Activity implements OnClickListener{
  13. //1、声明progressDialog的对象以及按钮
  14. private ProgressDialog prodialog;
  15. private Button show;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. init();
  21. }
  22. private void init() {
  23. // TODO Auto-generated method stub
  24. //2、绑定
  25. show=(Button) findViewById(R.id.show);
  26. //3、设置监听器
  27. show.setOnClickListener(this);
  28. }
  29. @Override
  30. public void onClick(View arg0) {
  31. // TODO Auto-generated method stub
  32. //4、设置页面显示风格
  33. //新建progressDialog对象
  34. prodialog=new ProgressDialog(MainActivity.this);
  35. //给对话框设置显示风格
  36. prodialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  37. //设置标题
  38. prodialog.setTitle("哈哈哈");
  39. //设置对话框里的而文字信息
  40. prodialog.setMessage("我好聪明啊");
  41. //设置图标
  42. prodialog.setIcon(R.drawable.ic_launcher);
  43. //5、设定关于progressBar的一些属性
  44. //设定最大进度
  45. prodialog.setMax(100);
  46. //设定初始化进度
  47. prodialog.incrementProgressBy(50);
  48. //进度条是明确显示进度的
  49. prodialog.setIndeterminate(false);
  50. //6、设定一个确定按钮
  51. prodialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
  52. @Override
  53. public void onClick(DialogInterface dialog, int which) {
  54. // TODO Auto-generated method stub
  55. Toast.makeText(MainActivity.this,"快点爱上我", Toast.LENGTH_SHORT);
  56. }
  57. });
  58. //7、是否可以通过返回按钮退出对话框
  59. prodialog.setCancelable(true);
  60. //8、显示progressDialog
  61. prodialog.show();
  62. }
  63. }

011252_eNBC_2725918.png

011300_wObr_2725918.png

 

7、自定义ProgressBar的样式

    首先我们需要知道系统预定义的水平进度条的样式是如何加载的。这样我们需要回到activity_main.xml文件中来。

    我们注意到下面一行代码:

        style="?android:attr/progressBarStyleHorizontal"

    事实上,他真正的加载文件位于

        style="@android:style/Widget.ProgressBar.Horizontal"

    我们通过ctrl+鼠标左键点击引号中的位置,就可以看到系统自带的横向进度条的样式

  1. <style name="Widget.ProgressBar.Horizontal">
  2. <item name="android:indeterminateOnly">false</item>
  3. <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
  4. <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
  5. <item name="android:minHeight">20dip</item>
  6. <item name="android:maxHeight">20dip</item>
  7. <item name="android:mirrorForRtl">true</item>
  8. </style>

    其中的android:progressDrawable可以去加载一个自己自定义的布局样式的一个文件。我们同样用ctrl+鼠标左键打开这里的样式文件,看看系统是如何设定的

  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  2. <!--背景 -->
  3. <item android:id="@android:id/background">
  4. <shape>
  5. <!--圆角 -->
  6. <corners android:radius="5dip" />
  7. <!--渐变色 -->
  8. <gradient
  9. <!--起始颜色 -->
  10. android:startColor="#ff9d9e9d"
  11. <!--中间颜色 -->
  12. android:centerColor="#ff5a5d5a"
  13. android:centerY="0.75"
  14. <!--终止颜色 -->
  15. android:endColor="#ff747674"
  16. android:angle="270"
  17. />
  18. </shape>
  19. </item>
  20. <!--第二进度条 -->
  21. <item android:id="@android:id/secondaryProgress">
  22. <clip>
  23. <shape>
  24. <corners android:radius="5dip" />
  25. <gradient
  26. android:startColor="#80ffd300"
  27. android:centerColor="#80ffb600"
  28. android:centerY="0.75"
  29. android:endColor="#a0ffcb00"
  30. android:angle="270"
  31. />
  32. </shape>
  33. </clip>
  34. </item>
  35. <!--第一进度条 -->
  36. <item android:id="@android:id/progress">
  37. <clip>
  38. <shape>
  39. <corners android:radius="5dip" />
  40. <gradient
  41. android:startColor="#ffffd300"
  42. android:centerColor="#ffffb600"
  43. android:centerY="0.75"
  44. android:endColor="#ffffcb00"
  45. android:angle="270"
  46. />
  47. </shape>
  48. </clip>
  49. </item>
  50. </layer-list>

    不难发现,我们可以自己对他的颜色进行修改,以达到自定义的目的。这里我简单把颜色修改了一下

  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  2. <!--背景 -->
  3. <item android:id="@android:id/background">
  4. <shape>
  5. <!--圆角 -->
  6. <corners android:radius="5dip" />
  7. <!--渐变色 -->
  8. <gradient
  9. <!--起始颜色 -->
  10. android:startColor="#B9A4FF"
  11. <!--中间颜色 -->
  12. android:centerColor="#C6B7FF"
  13. android:centerY="0.75"
  14. <!--终止颜色 -->
  15. android:endColor="#C3B2FF"
  16. android:angle="270"
  17. />
  18. </shape>
  19. </item>
  20. <!--第二进度条 -->
  21. <item android:id="@android:id/secondaryProgress">
  22. <clip>
  23. <shape>
  24. <corners android:radius="5dip" />
  25. <gradient
  26. android:startColor="#57E8FF"
  27. android:centerColor="#74EBFF"
  28. android:centerY="0.75"
  29. android:endColor="#8EEFFF"
  30. android:angle="270"
  31. />
  32. </shape>
  33. </clip>
  34. </item>
  35. <!--第一进度条 -->
  36. <item android:id="@android:id/progress">
  37. <clip>
  38. <shape>
  39. <corners android:radius="5dip" />
  40. <gradient
  41. android:startColor="#ffffd300"
  42. android:centerColor="#ffffb600"
  43. android:centerY="0.75"
  44. android:endColor="#ffffcb00"
  45. android:angle="270"
  46. />
  47. </shape>
  48. </clip>
  49. </item>
  50. </layer-list>

    运行即可得到自定义进度条的结果,可自行与本文之前的截图对比,可以看到很明显的差别,尽管颜色丑了点。

013724_bKTV_2725918.png

    希望大家能以小见大,做一些更有意思的尝试。

转载于:https://my.oschina.net/CoderBleak/blog/718751

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/264354?site
推荐阅读
相关标签
  

闽ICP备14008679号