当前位置:天才代写 > tutorial > 安卓教程 > Android学习笔记:进度条ProgressBar的使用以及与AsyncTask的配合使用

Android学习笔记:进度条ProgressBar的使用以及与AsyncTask的配合使用

2021-02-22 10:25 星期一 所属: 安卓教程 浏览:752

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部件。

 

    关键字:

天才代写-代写联系方式