一,ProgressBar:显示一个耗时动作的进度
1.通过style设置PrograssBar样式,属性如
属性 | 作用 |
---|---|
style/Widget.ProgressBar.Horizontal | 水平进度条 |
style/Widget.ProgressBar | 顺时针旋转,中号圆形进度条 |
style/Widget.ProgressBar.Inverse | 顺时针旋转,中号圆形进度条 |
style/Widget.ProgressBar.Small | 顺时针旋转的,小号圆形进度条 |
style/Widget.ProgressBar.Small.Inverse | 顺时针旋转的,小号圆形进度条 |
:attr/progressBarStyleHorizontal | 细的、水平方向的进度条 |
android:attr/progressBarStyle | 逆时针旋转的,中号圆形进度条 |
android:attr/progressBarStyleInverse/large/small | 逆时针旋转的,中号圆形进度条/大号/小号 |
2.ProgressBar常用属性
XML属性 | 作用 |
---|---|
android:max | 设置进度条的最大值 |
android:min | 设置进度条的最小值 |
android:progress | 设置进度条的已完成进度值 |
android:progressDrawable | 设置进度条的绘制形式 |
android:indeterminate | 该属性为true,设置进度条不精确显示进度 |
android:indeterminateDrawable | 设置绘制不显示进度的进度条的样式 |
android:indeterminateDuration | 设置不精确显示进度的持续时间 |
android:secondryPrograss | 设置第二进度值,取值0~max |
3.progressBar常用方法
方法 | 属性 |
---|---|
setProgress(int) | 设置进度条的完成百分比 |
incrementProgressBy(int) | 设置进度条的增加或减少量,参数为正数增,负数减 |
getProgress(int) | 获取完成进度的百分比 |
setSecondaryProgress(int secondaryProgress) | 设置第二刻度值 |
getSecondaryProgress() | 获取第二刻度值 |
4.在标题上显示进度条的步骤:
- 调用Activity的requestWindowFeature()传入参数启用特定的窗口特征
- window.FEATURE_PROGRESS:带进度的指示器功能
- window.FEATURE_INDETAMINATEPROGRESS:不确定的进度
- 调用Activity的setProgressBarVisibility(boolean)或setProgressBarIndeterminateVisibility(boolean)控制进度条的显示或隐藏
二,SeekBar:拖动进度条
- 常用属性
属性 | 方法 |
---|---|
android:thumb | 属性来改变滑块外观 |
- 练习:进度条
<LinearLayout android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:orientation="vertical">
<SeekBar //创建进度条组件
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/sb_normal"
android:maxHeight="5.0dp"
android:minHeight="5.0dp"
android:progress="50"
android:padding="20dp"
android:progressDrawable="@drawable/sb_var" //自定义图片组件
android:thumb="@drawable/sb_thumb"/>
</LinearLayout>
sb_var.xml:
<?xml version="1.0" encoding="utf-8"?>
<!--用到一个layer-list的Drawable文件。即层叠文件,依次是:背景,二级进度条,当前进度条 -->
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<solid android:color="#FFFFD042"/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<solid android:color="#FFFFFFFF"/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="#FF96E85D"/>
</shape>
</clip>
</item>
</layer-list>
sb_thumb:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/yuan1"/>
<item android:state_pressed="false" android:drawable="@drawable/yuan"/>
</selector>
三,RatingBar 星级评分条
- 作用:允许用户通过拖动星星图案来改变进度
2.常见XML属性
XML属性 | 作用 |
---|---|
isIndicator | 设置星级评分是否允许改变 |
numStars | 设置星级总个数 |
rating | 设置当前星级 |
stepSize | 设置星级步长,默认为0.5 |
- 星级评分常用方法
方法 | 作用 |
---|---|
getNumStars(): | 用于获取星级总个数。 |
setNumStars(): | 用于设置星级总个数。 |
getRating(): | 用于获取当前星级。 |
setRating(): | 用于设置当前星级。 |
getStepSize() | 用于获取星级步长。 |
setStepSize(): | 用于设置星级步长。 |
getProgress(): | 用于获取当前进度,获取到的进度值= getRating()/getStepSize()。 |
layout代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ratingBar"
android:rating="2.5"
android:numStars="5"
android:isIndicator="false"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
android:id="@+id/submit"
android:layout_marginTop="20dp"/>
</LinearLayout>
MainActivity
package com.example.a5_4;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private RatingBar ratingBar;
private Button submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ratingBar=(RatingBar) findViewById(R.id.ratingBar);
submit=(Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int progress=ratingBar.getProgress();
float rating=ratingBar.getRating();
float step=ratingBar.getStepSize();
Log.i("星级评分条","step="+step+"progress="+progress+"rating="+rating);
Toast.makeText(MainActivity.this,"你得到了"+rating+"x星",Toast.LENGTH_SHORT).show();
}
});
}
}