自定义ProgressBar样式

转载注明出处:
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

效果图:

时间: 2024-11-05 02:23:37

自定义ProgressBar样式的相关文章

android 自定义progressbar 样式

在res下创建drawable文件夹,新建文件drawable/progressbar_color.xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 背景 gradient是

ProgressBar样式总结与自动填充方法(代码)

有时候开发的时候需要用一个进度条告知用户目前正在运行一个耗时操作,但是并不需要明确知道某个value来setProgress,所以就可以自定义一个时间和进度让进度条自动运行了. 下面是代码: Handler mHandler=new Handler(){ @Override public void handleMessage(Message msg) { p.setProgress(msg.what); mHandler.post(updateThread);//实现连续过程 } }; Runn

Android中ProgressBar样式

Android系统已经被各大厂商改的面目全非,各种系统组件在不同手机上显示的效果完全不同,现在要想在开发中想要保持统一的界面风格,必须全部修改系统组件的样式,现在我们需要修改系统默认的ProgressBar,就Android系统本身来说,不同的版本组件的样式也不同. 系统中ProgressBar样式 找到android-sdk目录下的platforms\android-15\data\res\values中的styles.xml,然后查找ProgressBar,可以发现 <style name=

WPF 自定义CheckBox样式

自定义CheckBox样式,mark一下,方便以后参考复用 设计介绍: 1.一般CheckBox模板太难看了,肯定要重写其中的模板 2.模板状态为未选中状态和选中状态,设置为默认未选中就好了. 默认状态,设置边框.透明度等 选中的话,我们可以设置√和背景. <Style x:Key="CheckBoxStyle" TargetType="{x:Type CheckBox}"> <Setter Property="SnapsToDevice

wpf radiobuttong 去前面的圆点, 自定义radiobutton样式

自定义radiobutton样式代码: <windows.Resources> <LinearGradientBrush x:Key="CheckRadioFillNormal"> <GradientStop Color="#FFD2D4D2" Offset="0"/> <GradientStop Color="#FFFFFFFF" Offset="1"/>

CSS自定义滚动条样式

相信很多人都遇到过在设计中自定义滚动条样式的情景,之前我都是努力说服设计师接受浏览器自带的滚动条样式,但是这样只能规避还是解决不了问题,最近在项目中遇到了,正好来总结一下.当然,兼容所有浏览器的滚动条样式目前是不存在的. IE下的滚动条样式 IE是最早提供滚动条的样式支持,好多年了,但是其它浏览器一直没有支持,IE独孤求败了. 这些样式规则很简单: scrollbar-arrow-color: color; /*三角箭头的颜色*/ scrollbar-face-color: color; /*立

博客园自定义CSS样式设置

关于博客园自定义CSS样式设置 关于博客园自定义CSS样式设置 首先,选择一个博客皮肤模板,如下 然后,F12审查元素,可对右侧的元素规则进行自定义更改,然后覆盖原CSS 譬如看看取消掉自定义背景图片是什么样子,同理也可以添加CSS样式代码 如此修改完后,就可在页面定制CSS代码框中填上你所需要修改的代码 下面是我的页面定制CSS代码: 1.html,body{2. color: #807C7C;3. font-family: "Helvetica Neue",Helvetica,Ar

CSharp如何自定义鼠标样式

一.如何设置鼠标样式? 在CSharp的WinForm开发中,可以通过下面的API设置鼠标样式: 1 //把鼠标样式设置为十字(系统自带的一种鼠标样式) 2 this.Cursor = Cursors.Cross; 3 //把鼠标样式设置为自定义图片 4 this.Cursor = new Cursor(string fileName);//要求file为cur格式 5 this.Cursor = new Cursor(IntPtr handel); 6 this.Cursor = new Cu

progressbar样式

http://www.oschina.net/question/8676_11797 http://blog.csdn.net/ouyangtianhan/article/details/6565768 http://my.oschina.net/amigos/blog/59871 http://blog.csdn.net/mars2639/article/details/6620836 http://www.cnblogs.com/angeldevil/archive/2011/12/02/2