乐趣区

关于android:Android之ProgressBar-手把手教学使用控件

进度条是 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 中子标签显示的地位。

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

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

退出移动版