一个成功的创业者,三个因素,眼光、胸怀和实力。
本讲内容:ProgressBar 进度条 与SeekBar 进度条(ProgressBar的子类)
一、ProgressBar 显示风格(默认是标准环形进度条)
style="?android:attr/progressBarStyleLarge" 大环形进度条
style="?android:attr/progressBarStyleSmall" 小环形进度条
style="?android:attr/progressBarStyleHorizontal" 水平进度条
二、ProgressBar 的分类
1、可以精确显示进度(水平进度条)
2、不可以精确显示进度(环形进度条)
三、ProgressBar 的关键属性
android:max="100" 设置最大显示进度
android:progress="50" 设置第一显示进度
android:secondaryProgress="80" 设置第二显示进度
android:indeterminate="true" 设置是否精确显示。注意:true表示不精确显示进度,false表示精确显示进度
四、ProgressBar 的关键方法
setProgress(int) 设置第一进度
setSecondaryProgress(int) 设置第二进度
getProgress() 获取第一进度
getSecondaryProgress() 获取第二进度
incrementProgressBy(int) 增加或减少第一进度
incrementSecondaryProgressBy(int)增加或减少第二进度
getMax() 获取最大进度
1.在Manifest.xml中设置
不显示标题栏
android:theme="@android:style/Theme.NoTitleBar"
全屏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
2.在代码中实现
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
六、Android所有控件的可见属性
可以通过android:visibility进行指定,可选值有三种,visible、invisible和gone。visible表示控件是可见的(这个值是默认值),invisible表示控件是不可见的,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态,gone表示控件不仅不可见,而且不再占用任何屏幕空间,我们还可以通过代码来设置控件的可见性,使用setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.GONE三种值。
示例一:标题上ProgressBar的设置
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 启用窗口特征,启用带进度和不带进度的进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
// 分别显示两种进度条
setProgressBarVisibility(true);
setProgressBarIndeterminateVisibility(true);
setProgress(5000);//默认MAX=10000
}
}
示例二:
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/id_progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="40"
android:secondaryProgress="70" />
<Button
android:id="@+id/id_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="增加" />
<Button
android:id="@+id/id_reduce"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="减少" />
<Button
android:id="@+id/id_reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="重置" />
<TextView
android:id="@+id/id_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity implements OnClickListener{
private ProgressBar progress;
private Button add;
private Button reduce;
private Button reset;
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
/**
* 初始化控件
*/
private void initViews() {
progress=(ProgressBar) findViewById(R.id.id_progressBar);
add=(Button) findViewById(R.id.id_add);
reduce=(Button) findViewById(R.id.id_reduce);
reset=(Button) findViewById(R.id.id_reset);
text=(TextView) findViewById(R.id.id_text);
add.setOnClickListener(this);
reduce.setOnClickListener(this);
reset.setOnClickListener(this);
// 获取第一进度条的进度
int first = progress.getProgress();
// 获取第二进度条的进度
int second = progress.getSecondaryProgress();
// 获取进度条的最大进度
int max = progress.getMax();
text.setText("第一进度百分比:" + first*100/max + "% 第二进度百分比:" + second*100/max + "%");
}
/**
* 按钮点击事件
*/
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_add:
// 增加第一进度和第二进度10个刻度
progress.incrementProgressBy(10);
progress.incrementSecondaryProgressBy(10);
break;
case R.id.id_reduce:
// 减少第一进度和第二进度10个刻度
progress.incrementProgressBy(-10);
progress.incrementSecondaryProgressBy(-10);
break;
case R.id.id_reset:
progress.setProgress(40);
progress.setSecondaryProgress(70);
break;
}
text.setText("第一进度百分比:" + progress.getProgress()*100/progress.getMax() +
"% 第二进度百分比:" + progress.getSecondaryProgress()*100/progress.getMax() + "%");
}
}
示例三:进度条对话框
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/id_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="进度条对话框" />
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity implements OnClickListener{
private Button show;
private ProgressDialog dialog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show=(Button) findViewById(R.id.id_show);
show.setOnClickListener(this);
}
/**
* 按钮点击事件
*/
public void onClick(View v) {
switch (v.getId()) {
case R.id.id_show:
/**
* 对话框显示风格
*/
//新建ProgressDialog对象
dialog=new ProgressDialog(MainActivity.this);
//设置图标
dialog.setIcon(R.drawable.ic_launcher);
//设置标题
dialog.setTitle("阳江");
//设置对话框里的文字信息
dialog.setMessage("欢迎大家支持!");
//设置进度条显示风格(默认是环形)
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
/**
* 设定关于ProgressBar的一些属性
*/
//设定最大进度
dialog.setMax(100);
//设定初始化已经增长到的进度
dialog.incrementProgressBy(50);
//进度条是明确显示进度的
dialog.setIndeterminate(false);
/**
* 设定一个确定按钮
*/
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "HelloWorld", Toast.LENGTH_SHORT).show();
}
});
//默认的就是true,为fales时,只能按确定才能退出弹出框。
dialog.setCancelable(false);
//显示ProgressDialog
dialog.show();
break;
}
}
}
示例四:自定义进度条样式(通过查看原码修改)
下面是res/drawable/progress_bar_bg文件
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<solid android:color="#88000000"/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#B9A4FF"
android:centerColor="#C6B7FF"
android:centerY="0.75"
android:endColor="#C3B2FF"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:startColor="#57E8FF"
android:centerColor="#74EBFF"
android:centerY="0.75"
android:endColor="#8EEFFF"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list>
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="@android:style/Widget.ProgressBar.Horizontal"
android:progressDrawable="@drawable/progress_bar_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="40"
android:secondaryProgress="70" />
</LinearLayout>
android:progressDrawable="@drawable/progress_bar_bg" 复盖系统自带样式
style="@android:style/Widget.ProgressBar.Horizontal" 通过ctrl+左键查看系统自带样式原码
示例五:SeekBar
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<SeekBar
android:id="@+id/id_seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50" />
<TextView
android:id="@+id/id_tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/id_tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity implements OnSeekBarChangeListener{
private SeekBar seekBar;
private TextView tv1;
private TextView tv2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar=(SeekBar) findViewById(R.id.id_seekBar);
tv1=(TextView) findViewById(R.id.id_tv1);
tv2=(TextView) findViewById(R.id.id_tv2);
seekBar.setOnSeekBarChangeListener(this);
}
/**
* 数值改变
*/
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
tv1.setText("正在拖动");
tv2.setText("当前数值:"+progress);
}
/**
* 开始拖动
*/
public void onStartTrackingTouch(SeekBar seekBar) {
tv1.setText("开始拖动");
}
/**
* 停止拖动
*/
public void onStopTrackingTouch(SeekBar seekBar) {
tv1.setText("停止拖动");
}
}
示例六:自定义SeekBar(通过查看原码修改)
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<SeekBar
android:id="@+id/id_seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:thumb="@drawable/thumb"
android:max="100"
android:progress="50" />
<!-- android:thumb:拖动标志 -->
<!-- 通过系统自带的样式可查看原码style="@android:style/Widget.SeekBar" -->
<TextView
android:id="@+id/id_tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/id_tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
下面是drawable/thumb_selector文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"/>
<item android:drawable="@drawable/normal"/>
</selector>
Take your time and enjoy it