轉載注明出處: http://blog.csdn.net/forwardyzk/article/details/42609491
我們使用的進度條多種多樣,下面有幾種自定義的進度條的樣式,下面介紹幾個.
進度條的有基本的四種樣式:
預設風格的進度條: android:progressBarStyle
水準長型進度條: android:progressBarStyleHorizontal
大圓形進度條: android:progressBarStyleLarge
小圓形進度條: android:progressBarStyleSmall
下面以橫向進度樣式作為例子,介紹自定義樣式.
思路:
1.自定義進度條的樣式.
2.設定樣式背景,進度條樣式,進度條背景.
例如:自定義顔色背景樣式
<style name="progressBarHorizontal_indeter" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal</item>
<item name="android:minHeight">5dip</item>
<item name="android:maxHeight">5dip</item>
</style>
設定不确定的進度背景
progress_color_horizontal.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="270"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:startColor="#ff9d9e9d" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="270"
android:centerColor="#80C07AB8"
android:centerY="0.75"
android:endColor="#a0C07AB8"
android:startColor="#80C07AB8" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient
android:angle="270"
android:centerColor="#ffBBFFBB"
android:centerY="0.75"
android:endColor="#ff00DB00"
android:startColor="#ff00DB00" />
</shape>
</clip>
</item>
</layer-list
這是自定義圓形背景,和北京顔色,當然也可以使用存在的圖檔作為背景,設定的有進度條的背景,進度條的進度背景,和第二次進度背景圖檔.
下面介紹一個使用背景圖檔作為背景樣式的例子.
styles.xml
<style name="progressBarHorizontal" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@drawable/progress_horizontal</item>
<item name="android:minHeight">5dip</item>
<item name="android:maxHeight">5dip</item>
</style>
progress_horizontal.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@android:id/background"
android:drawable="@drawable/progressbar_back">
</item>
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/progressbar_indeter2">
</item>
<item
android:id="@android:id/progress"
android:drawable="@drawable/progressbar_indeter1">
</item>
</layer-list>
使用圖檔作為進度條的背景,進度背景.
使用步驟:
在布局檔案中直接加載樣式.
<ProgressBar
android:id="@+id/progress_indeter"
style="@style/progressBarHorizontal_indeter"
android:layout_width="200dip"
android:layout_height="10dip"
android:layout_margin="10dp"
android:indeterminate="true"
android:max="100"
android:progress="41" />
在調用出擷取此對象,然後可以其進度,通過線程.
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:gravity="center"
android:orientation="vertical"
tools:context="com.example.progressbardemo.MainActivity" >
<Button
android:id="@+id/start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="start"
android:textSize="30sp" />
<TextView
android:id="@+id/tv_pb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="0%"
android:textSize="25sp" />
<ProgressBar
android:id="@+id/progress_color"
style="@style/progressBarHorizontal_color"
android:layout_width="200dip"
android:layout_height="10dip"
android:layout_margin="10dp"
android:indeterminate="true"
android:max="100"
android:progress="41" />
<ProgressBar
android:id="@+id/progress_indeter"
style="@style/progressBarHorizontal_indeter"
android:layout_width="200dip"
android:layout_height="10dip"
android:layout_margin="10dp"
android:indeterminate="true"
android:max="100"
android:progress="41" />
<ProgressBar
android:id="@+id/progress_horizontal"
style="@style/progressBarHorizontal"
android:layout_width="200dip"
android:layout_height="10dip"
android:layout_margin="10dp"
android:indeterminate="true"
android:max="100"
android:progress="41" />
<ProgressBar
android:id="@+id/progress_arabia"
style="@style/progressBarHorizontal_arabia"
android:layout_width="200dip"
android:layout_height="10dip"
android:layout_margin="10dp"
android:indeterminate="true"
android:max="100"
android:progress="41" />
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private final String TAG = MainActivity.class.getSimpleName();
/**
* 進度條
*/
private ProgressBar mColor = null;
private ProgressBar mIndeter = null;
private ProgressBar mHorizontal = null;
private ProgressBar mArabia = null;
/**
* 目前進度的值
*/
private int mCount = 0;
private int mDis = 100;
private TextView tv_pb;// 數字進行顯示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.start).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showIndeterDialog();
}
});
tv_pb = (TextView) findViewById(R.id.tv_pb);
initProgressBarView();
}
public void initProgressBarView() {
mColor = (ProgressBar) findViewById(R.id.progress_color);
mIndeter = (ProgressBar) findViewById(R.id.progress_indeter);
mHorizontal = (ProgressBar) findViewById(R.id.progress_horizontal);
mArabia = (ProgressBar) findViewById(R.id.progress_arabia);
initProgressBarData(mColor);
initProgressBarData(mIndeter);
initProgressBarData(mHorizontal);
initProgressBarData(mArabia);
}
public void initProgressBarData(ProgressBar bar) {
bar.setMax(101);
bar.setProgress(0);
if (bar == mArabia) {
bar.setProgress(101);
}
bar.setIndeterminate(false);
}
private void showIndeterDialog() {
mCount = 0;
mDis = 100;
new Thread() {
public void run() {
while (mCount <= 100 && mDis > 0) {
mColor.setProgress(mCount);
mIndeter.setProgress(mCount);
mHorizontal.setProgress(mCount);
mArabia.setProgress(mDis);
mCount++;
mDis--;
handle.sendEmptyMessage(0);
SystemClock.sleep(100);
}
};
}.start();
}
private Handler handle = new Handler() {
public void handleMessage(android.os.Message msg) {
DecimalFormat format = new DecimalFormat("0.00");
tv_pb.setText(String.valueOf(format.format(1.0
* mColor.getProgress() / mColor.getMax() * 100.0))
+ "%");
};
};
}
橫向的進度條設定最大值,和目前的進度,如果是從0~最大值,那麼就是從左到右顯示進度.
如果是從最大值~0,那麼就是從又到左顯示進度.
源碼下載下傳: http://download.csdn.net/detail/forwardyzk/8349889
效果圖: