进度条是app中最司空见惯的控件了,上面就来理解一下。

一、简介

进度条是UI界面中一种十分实用的组件,通常用于向用户像是某个耗时操作实现的百分比。进度条可动静地显示进度,因而防止长时间地执行某个操作时,让用户感觉程序失去了响应,从而更好地进步用户界面的敌对性。

进度条大体分为 程度型(条形)和 环形 如图所示:简直所有的花色的进度条都次要为这两种类型。

二、罕用属性和办法

属性名含意
style设置进度条的格调
max设置该进度条的最大值
maxHeight进度Widget最大高
miniHeight进度Widget最小高
maxWidth进度Widget最大宽
minWidth进度Widget最小宽
progress设置该进度条的已实现进度值
progressDrawable自定义drawable显示
indeteminateDrawable设置绘制不显示进度的进度条的Drawable对象
indeterminate该属性设为true,设置进度条不准确显示进度
indeteminateDuration设置不准确显示进度的持续时间
secondaryProgress定义二级进度值,值介于0到max。该进度在主进度和背景之间。比方用于网络播放视频时,二级进度用于示意缓冲进度,主进度用于示意播放进度。
interpolator设置动画速度
indeterminateBehavior定义当进度达到最大时,不确定模式的体现;该值必须为repeat或者cycle,repeat示意进度从0从新开始;cycle示意进度放弃以后值,并且回到0

style属性:

  • @android:style/Widget.ProgressBar.Horizontal:程度进度条
  • @android:style/Widget.ProgressBar.Inverse:一般大小的进度条
  • @android:style/Widget.ProgressBar.Large:大环形进度条
  • @android:style/Widget.ProgressBar.Large.Inverse:大环形进度条
  • @android:style/Widget.ProgressBar.Small:小环形进度条
  • @android:style/Widget.ProgressBar.Small.Inverse:小环形进度条

在java代码中,咱们罕用的办法有:

getMax() //返回这个进度条的范畴的下限getProgress():返回进度getsecondaryProgress() //返回二级进度incrementProgressBy(int diff) //指定减少的进度isIndeterminate() //批示进度条是否在不确定模式下setIndeterminate(boolean indeterminate) //设置不确定模式下

三、简略应用

  1. 编写布局文件

    <!--    零碎提供的进度条--><TextView     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="程度进度条"     android:layout_marginTop="50dp"     android:layout_gravity="center"/> <ProgressBar     android:id="@+id/progress_01"     android:layout_width="match_parent"     android:layout_height="30dp"     android:max="100"     android:layout_marginTop="100dp"     android:padding="20dp"     style="@style/Widget.AppCompat.ProgressBar.Horizontal"/> <TextView     android:id="@+id/tv_progress"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_below="@id/progress_01"     android:layout_centerHorizontal="true"/>
  2. 编写java代码,细节在代码正文里
public class MainActivity extends AppCompatActivity {    private ProgressBar mProgressBar;    private TextView mTextView;    private int start=0,maxprogress;    private Handler mHandler=new Handler(){        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            switch (msg.what){                case 0:                    mTextView.setText(start+" %");//更新进度                    mProgressBar.setProgress(start);break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mProgressBar = findViewById(R.id.progress_01);        mTextView=findViewById(R.id.tv_progress);        maxprogress=mProgressBar.getMax();    }    @Override    protected void onStart() {        super.onStart();        //启动线程加载    new Thread() {        @Override        public void run() {            while (true) {                try {                    Thread.sleep(1000);//线程休眠1s                    int a = new Random().nextInt(10);//产生一个10以内的随机数                    start += a;                    if (start > maxprogress)//如果过程超过最大值                        break;                    mHandler.sendEmptyMessage(0);//在安卓里。咱们不能间接在线程中更新UI,这里用Hander音讯解决                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }.start();    }}

成果:

四、自定义ProgressBar

有时候,零碎款式的进度条曾经无奈满足咱们的需要,这个时候咱们就须要自定义进度条的款式了。

上面来实现下这个简略的自定义进度条,在从0到max的过程中会逐渐扭转色彩,色彩是能够自定义的。次要实现是引入一个自定义的xml资源文件,通过android:progressDrawable属性给ProgressBar映射该xml资源文件。

上图的xml资源文件为:

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <item android:id="@android:id/background">        <shape>            <corners android:radius="5dp"/>        </shape>        <!--    背景色彩-->        <color android:color="#CCCCCC"/>    </item>    <item android:id="@android:id/progress">        <clip            android:clipOrientation="horizontal"            android:gravity="left">            <shape>                <corners android:radius="5dp"/><!--  开始色彩,中途色彩,最初色彩-->                <gradient                    android:startColor="#00FF00"                    android:centerColor="#FFFF00"                    android:endColor="#FF0000"/>            </shape>        </clip>    </item></layer-list>

layer-list是一个层级嵌套的标签,能够嵌套多个item标签。在item中能够嵌套多种类型的标签,如shape,bitmap,color等,这些标签对应的都是Drawable的子类。

item标签有width,height,gravity,left,right,bottom,top…属性,管制item中子标签显示的地位。

安卓的标签很多,在当前的自定义控件会常常应用,可自行理解,后续讲其余控件我也会补充。

这样一个简略金玉其外;败絮其中的自定义进度条就做好了,至于应用和上一个实例一样。