android-ProgressBar属性

ProgressBar

 XML属性

属性名
描述
android:animationResolution
超时的动画帧之间的毫秒 ;必须是一个整数值,如“100”。
android:indeterminate
是否允许使用不确定模式,在不确定模式下,进度条动画无限循环
android:indeterminateBehavior
定义当进度达到最大时,不确定模式的表现;
该值必须为repeat或者cycle,repeat表示进度从0重新开始;cycle表示进度保持当前值,并且回到0
android:indeterminateDrawable
定义不确定模式是否可拉
android:indeterminateDuration
时间不定的动画
android:indeterminateOnly
限制为不定模式
android:interpolator

android:max
定义进度的最大值
android:maxHeight
进度Widget最大高
android:miniHeight
进度Widget最小高
android:maxWidth
进度Widget最大宽
android:minWidth
进度Widget最小宽
android:mirrorForRtl
定义了相关画板如果需要反映在RTL模式
android:progress
设置进度的默认值,值介于0到max之间
android:progressDrawable

android:secondaryProgress
定义二级进度值,值介于0到max。该进度在主进度和背景之间。比如用于网络播放视频时,二级进度用于表示缓冲进度,主进度用于表示播放进度。

进度条的样式

Widget.ProgressBar.Horizontal  长形进度

Android xml  布局:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.      android:id="@+id/progress_bar"  
  3.      android:layout_width="fill_parent"  
  4.      android:layout_height="wrap_content"  
  5.      style="@android:style/Widget.ProgressBar.Horizontal "  
  6.      />  
源码:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private ProgressBar mProgress;  
  2.  private int mProgressStatus = 0;  
  3.  private Handler mHandler = new Handler();  
  4.  @Override  
  5.  protected void onCreate(Bundle savedInstanceState) {  
  6.   super.onCreate(savedInstanceState);  
  7.   setContentView(R.layout.activity_main);  
  8.   mProgress = (ProgressBar) findViewById(R.id.progress_bar);  
  9.   new Thread(new Runnable() {  
  10.    @Override  
  11.    public void run() {  
  12.     while(mProgressStatus < 100){  
  13.      mProgressStatus = doWork();  
  14.      mHandler.post(new Runnable(){  
  15.       @Override  
  16.       public void run() {  
  17.        mProgress.setProgress(mProgressStatus);  
  18.       }  
  19.      });  
  20.     }  
  21.    }  
  22.   }).start();  
  23.  }  
效果图:

带第二进度的进度条

xml配置如下:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.     android:id="@+id/progress_bar_with_second"  
  3.     style="@android:style/Widget.ProgressBar.Horizontal"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:progress="40"  
  7.     android:secondaryProgress="70"  
  8.     android:paddingTop="20dp"  
  9.     android:paddingBottom="20dp"/>  
这里我们设置了初始的进度为40,android:progress的值在mini和max之间即mini<=progressvalue<=max
设置了第二进度条的进度值为70,该值也在mini和max之间。
效果如下:

不确定模式进度条

xml配置文件:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.       android:id="@+id/progress_bar_indeterminate"  
  3.       style="@android:style/Widget.ProgressBar.Horizontal"  
  4.       android:layout_width="fill_parent"  
  5.       android:layout_height="wrap_content"  
  6.       android:indeterminate="true"  
  7.       android:indeterminateBehavior="cycle"  
  8.       android:paddingBottom="20dp"  
  9.       android:paddingTop="20dp"  
  10.       android:progress="40" />  
这里通过android:indeterminate="true"设置了当前为无模式进度条
效果如图:

普通圆形进度:Widget.ProgressBar.Inverse

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.         android:id="@+id/progress_bar1"  
  3.         style="@android:style/Widget.ProgressBar.Inverse"  
  4.         android:layout_width="fill_parent"  
  5.         android:layout_height="wrap_content"  
  6.         android:progress="50"  
  7.         android:background="#ff00ff"  
  8.         android:paddingTop="4dp" />  
通过android:backgroup设置了背景色
效果如图:

普通小圆形进度条

Widget.ProgressBar.Small   或 Widget.ProgressBar.Small.Inverse
 xml配置:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.     android:id="@+id/progress_bar2"  
  3.     style="@android:style/Widget.ProgressBar.Small"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:background="#ff00ff"  
  7.     android:paddingBottom="20dp"  
  8.     android:paddingTop="20dp"  
  9.     android:progress="50" />  
效果图:

大号圆形进度条

Widget.ProgressBar.Large 或 Widget.ProgressBar.Large.Inverse
XML配置:
[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <ProgressBar  
  2.     android:id="@+id/progress_bar4"  
  3.     style="@android:style/Widget.ProgressBar.Large"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="wrap_content"  
  6.     android:background="#ff00ff"  
  7.     android:paddingBottom="20dp"  
  8.     android:paddingTop="20dp"  
  9.     android:progress="50" />  
效果图如下:

ProgressDialog

进度条对话框的设置

先看源码:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Button btn3 = (Button) findViewById(R.id.progress_dlg_3);  
  2.  btn3.setOnClickListener(new OnClickListener(){  
  3.   @Override  
  4.   public void onClick(View v) {  
  5.    ProgressDialog progressDlg = new ProgressDialog(  
  6.      ProgressDlg.this);  
  7.    progressDlg.setTitle("进度对话框测试");  
  8.    progressDlg.setMessage("测试进度");  
  9.    progressDlg.setIcon(R.drawable.ic_launcher);  
  10.    progressDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  11.    progressDlg.setCancelable(false);  
  12.    progressDlg.show();  
  13.   }});  
这里我们设置了在Button的点击事件时,弹出进度对话框progressDlg;
其中ProgressDlg.this表示当前的Activity
方法setTitle 设置当前进度对话框的标题
setMessage 设置当前进度对话框的消息
setIcon  设置进度对话框的图标
setProgressStyle设置进度条类型。包括ProgressDialog.STYLE_SPINNER(圆形 (默认))、ProgressDialog.STYLE_HORIZONTAL(长条形)
setCancelable() 表示是否可按回退键取消对话框。true表示可以通过回退键取消对话框,否则不能通过回退键取消对话框。
效果图如下:

ProgressDialog.STYLE_HORIZONTAL类型进度条效果如下:

给进度对话框添加上按钮

可以个进度对话框添加三种按钮:
DialogInterface.BUTTON_POSITIVE  确定
DialogInterface.BUTTON_NEGATIVE 取消
DialogInterface.BUTTON_NEUTRAL 普通
添加按钮的方法如下:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. progressDlg.setButton(DialogInterface.BUTTON_NEUTRAL,  
  2.      "取消"new DialogInterface.OnClickListener() {  
  3.       @Override  
  4.       public void onClick(DialogInterface dialog,  
  5.         int which) {  
  6.        if(which == DialogInterface.BUTTON_NEGATIVE){  
  7.         System.out.println("Click negative");  
  8.        }  
  9.       }  
  10.      });  
第一个参数制定按钮类型,第二个参数指定响应按钮点击事件的监听
效果如下:

http://blog.csdn.net/wqjsir/article/details/23569543

实现圆弧进度条的自定义ProgressBar,可以使用Canvas和Paint来绘制。 首先,创建一个自定义的ProgressBar类,继承自ProgressBar类,并实现构造方法和onDraw方法: ``` public class CircleProgressBar extends ProgressBar { private Paint paint; // 画笔 private int roundColor; // 圆环颜色 private int progressColor; // 进度条颜色 private int textColor; // 文字颜色 private float textSize; // 文字大小 private float roundWidth; // 圆环宽度 private int max; // 最大进度 private boolean textIsDisplayable; // 是否显示进度文字 private int style; // 进度条样式 public static final int STROKE = 0; public static final int FILL = 1; public CircleProgressBar(Context context) { this(context, null); } public CircleProgressBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CircleProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // 获取自定义属性的值 TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar); roundColor = mTypedArray.getColor(R.styleable.CircleProgressBar_roundColor, Color.RED); progressColor = mTypedArray.getColor(R.styleable.CircleProgressBar_progressColor, Color.GREEN); textColor = mTypedArray.getColor(R.styleable.CircleProgressBar_textColor, Color.GREEN); textSize = mTypedArray.getDimension(R.styleable.CircleProgressBar_textSize, 15); roundWidth = mTypedArray.getDimension(R.styleable.CircleProgressBar_roundWidth, 5); max = mTypedArray.getInteger(R.styleable.CircleProgressBar_max, 100); textIsDisplayable = mTypedArray.getBoolean(R.styleable.CircleProgressBar_textIsDisplayable, true); style = mTypedArray.getInt(R.styleable.CircleProgressBar_style, 0); mTypedArray.recycle(); // 初始化画笔 paint = new Paint(); } @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); // 获取圆心坐标和半径 int centerX = getWidth() / 2; int centerY = getHeight() / 2; int radius = (int) (centerX - roundWidth / 2); // 绘制圆环 paint.setColor(roundColor); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(roundWidth); paint.setAntiAlias(true); canvas.drawCircle(centerX, centerY, radius, paint); // 绘制进度条 paint.setStrokeWidth(roundWidth); paint.setColor(progressColor); RectF oval = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius); switch (style) { case STROKE: paint.setStyle(Paint.Style.STROKE); canvas.drawArc(oval, 0, 360 * getProgress() / getMax(), false, paint); break; case FILL: paint.setStyle(Paint.Style.FILL_AND_STROKE); if (getProgress() != 0) canvas.drawArc(oval, 0, 360 * getProgress() / getMax(), true, paint); break; } // 绘制文字 paint.setStrokeWidth(0); paint.setColor(textColor); paint.setTextSize(textSize); paint.setTypeface(Typeface.DEFAULT_BOLD); int percent = (int) (((float) getProgress() / (float) getMax()) * 100); if (textIsDisplayable && percent >= 0) { String text = percent + "%"; float textWidth = paint.measureText(text); canvas.drawText(text, centerX - textWidth / 2, centerY + textSize / 2, paint); } } } ``` 在这个类中,我们定义了几个自定义属性,包括圆环颜色、进度条颜色、文字颜色、文字大小、圆环宽度、最大进度、是否显示进度文字、进度条样式等。在构造方法中,我们获取了这些属性的值,并初始化了画笔。在onDraw方法中,我们首先获取了圆心坐标和半径,然后使用画笔绘制了圆环和进度条,最后绘制了进度文字。 接下来,在布局文件中使用这个自定义ProgressBar: ``` <com.example.circleprogressbar.CircleProgressBar android:id="@+id/circle_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" app:roundColor="#cccccc" app:roundWidth="5dp" app:progressColor="#FF4081" app:textColor="#FF4081" app:textSize="20sp" app:textIsDisplayable="true" app:style="STROKE" /> ``` 最后,在Java代码中设置进度值即可: ``` CircleProgressBar circleProgressBar = findViewById(R.id.circle_progressbar); circleProgressBar.setProgress(50); // 设置进度为50% ``` 这样就完成了自定义的圆弧进度条的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值