Android学习笔记:进度条ProgressBar的使用以及与AsyncTask的配合使用
ProgressBar时android用以表明进展的部件。当实行一个较为用时的实际操作(如io实际操作、互联网实际操作等),为了更好地防止页面沒有转变 让客户体验减少,出示一个时间轴能够让客户了解程序流程仍在运作。
一、ProgressBar有以下几类普遍款式
1、默认设置时间轴的款式为圆形(为中等水平尺寸的圆形)
<ProgressBar
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
/>
留意,当款式为圆形时,其进展不断的在转动,仅仅告知用互程序流程在实行,没法精准地告知客户实际进展。
并且默认设置表明便是转动的,还没法让它慢下来,仅有根据程序流程让其掩藏(例如每日任务解决过去进行时)。
假如要想表明为环形的,又要操纵其间断和转动,必须用自定的方法,这一没有这儿详细介绍。
掩藏时间轴,非常简单:xxxx.setVisibility(View.GONE);
2、表明为大的规格的圆形
<ProgressBar
style=”?android:attr/progressBarStyleLarge”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
/>
3、表明为小的规格的圆形
<ProgressBar
style=”?android:attr/progressBarStyleSmall”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
/>
能够立即设定 layout_width 和 layout_height为实际的值,来操纵圆形的半经。
4、表明为直条型的
<ProgressBar
style=”?android:attr/progressBarStyleHorizontal”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
/>
针对直条型的款式,不但能够让它向环形一样,默认设置便是进展不断转变 ;并且还能够精准操纵其进展,下边会关键详细介绍。
二 、直条型时间轴
设定为一直在转动的款式
<ProgressBar
android:id=”@ id/progress1″
style=”?android:attr/progressBarStyleHorizontal”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:indeterminate=”true”
/>
设定indeterminate特性为true,就可以表明时时间轴一直在转变 ,该特性默认设置是false的。
假如想让它终止转变 ,能够根据编码操纵:
ProgressBar pro1 = (ProgressBar) findViewById(R.id.progress1);
pro1.setIndeterminate(false);
假如想让它终止时,进展表明进行,能够以下编码:
pro1.setProgress(100);
留意时间轴的默认设置较大 尺寸是100,能够根据setMax来设定自身必须的值。
三、精准操纵进展(和AsyncTask融合)
编码以下
public void startProgress(View view) { final ProgressBar pro1 = (ProgressBar) findViewById(R.id.progress1); new AsyncTask<Integer, Integer, Integer>() { @Override protected Integer doInBackground(Integer... params) { for (int i = 1; i <= 100; i ) doSomethingTask(i); return 100; } private void doSomethingTask(int num) { try { Thread.sleep(50); publishProgress(num); } catch (InterruptedException e) { e.printStackTrace(); } } @Override protected void onPostExecute(Integer result) { TextView resultView = (TextView) findViewById(R.id.resultText); resultView.setVisibility(View.VISIBLE); resultView.setText("the result is " result); super.onPostExecute(result); } @Override protected void onProgressUpdate(Integer... values) { pro1.setProgress(values[0]); super.onProgressUpdate(values); } }.execute(1); }
在AsyncTask的doInBackground方式中实行后台任务(事实上是在此外进程中实行,如io实际操作、互联网实际操作。在这个方式中不可以操作面板部件),假如想让时间轴表明正中间的进展,就可以在后台任务的实行全过程中启用publishProgress方式推送进展。而实行publishProgress方式,会开启onProgressUpdate方式(该方式在主线任务程中开展,能够在该方式中升级页面部件,这儿升级的是时间轴的进展)。当doInBackground方式实行结束后,会开启onPostExecute方式(该方式在主线任务程中开展,能够在该方式中升级页面部件),能够在该方式中表明任务完成后的页面,上边事例是在文中view表明下信息内容。
根据上边的编码和事例,大部分就可以考虑绝大多数情景。最终提一点的是,ProgressBar的进展只有根据编码操纵,没法让客户拖拽。假如要想让客户可以拖拽进展(例如在视頻或音频播放页面),能够应用SeekBar部件。