您的位置:首页 > 移动开发 > Android开发

Android ProgressBar自定义图片进度,自定义渐变色进度条

2015-06-16 12:16 746 查看
java.lang.Object
?	android.view.View
?	android.widget.ProgressBar
直接子类
AbsSeekBar
间接子类
RatingBar, SeekBar


在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中

1、android.widget. ProgressBar,继承自android.view.View 。在android.widget包中。对应对话框ProgressDialog。ProgressBar有两种展示方式,表盘形式(普通、小、大)和条形填充形式。在layout定义时,需要通过设施style属性类设置展示方式。

ProgressBar的样式有四种:

android:progressBarStyle:默认进度条样式,不确定模式

android:progressBarStyleHorizontal:水平进度条样式

android:progressBarStyleLarge :大号进度条样式,也是不确定进度模式


android:progressBarStyleSmall :小号进度条样式,也是不确定进度模式


二、XML重要属性

android:max--
这事进度条长度最大值

android:progress--设定度条当前进度值

android:secondaryProgress--第二进度条进度值

    android:progressBarStyle:默认进度条样式

    android:progressBarStyleHorizontal:水平样式

style
=
"?android:attr/progressBarStyleLarge"
--- 属性风格类型--大圆圈,如下图


style=”?android:attr/progressBarStyleSmall”
---
属性风格类型--小圆圈,如下图:



style="?android:attr/progressBarStyleHorizontal"
--水平进度条 --
如下图:



几秒钟之后自动滚到到如下:



也可以用下面的形式代替上面的形式的:

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/>//中
<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/> //大圆
<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/> //小圆


三、重要方法

    getMax():返回这个进度条的范围的上限

    getProgress():返回当前进度值

    getSecondaryProgress():返回次要当前进度值

    incrementProgressBy(int diff):指定增加的进度--即步长

    isIndeterminate():指示进度条是否在不确定模式下

    setIndeterminate(boolean indeterminate):设置不确定模式下

    setVisibility(int v):设置该进度条是否可视

四、重要事件

    onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件

接下来看案例:

1.定义一个布局文件progressbar.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/startText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="垂直的----标题上面也有一个进度条哦"
android:textColor="#CD0000"
android:background="#BC8F8F"
/>
<!-- style=”?android:attr/progressBarStyleLarge”大圆圈 -->
<ProgressBar
android:id="@+id/progtessBer_btn_id1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge"
/>
<!-- style=”?android:attr/progressBarStyleSmall”小圆圈 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleSmall"
android:layout_gravity="center_horizontal"
/>
<TextView
android:id="@+id/startText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="水平的"
android:textColor="#aaaaaa"
/>
<!--  style="?android:attr/progressBarStyleHorizontal"  水平进度条 -->
<ProgressBar
android:id="@+id/progtessBer_btn_id2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/progress_text"
/>
</LinearLayout>
</ScrollView>


2.之后定义java文件:ProgressBarDemo.java

package com.dream.app.start.first.prograssbar;
import com.dream.app.start.MenuDemo;
import com.dream.app.start.R;
import com.dream.app.start.R.id;
import com.dream.app.start.R.layout;
import com.dream.app.start.utils.PublicClass;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class ProgressBarDemo extends PublicClass {
private ProgressBar progressbar,progressbar_1;
Button btn1,btn2;
private int prostatus=0;
//创建一个handler对象
private Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

//在标题条里放置进度条。请求窗口特色风格,这里设置成不明确的进度风格
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

//设置窗口进度条特性风格
// requestWindowFeature(Window.FEATURE_PROGRESS);

setContentView(R.layout.progressbar);
//设置标题栏中的不明确的进度条是否可以显示,当你需要表示处理中的时候设置为True,处理完毕后设置为false

setProgressBarIndeterminateVisibility(true);

//设置进度条进度值,要乘以100的
// setProgress(60*100);
// setSecondaryProgress(80*100);

btn2=(Button)findViewById(R.id.button_cancel);
// btn2.setOnClickListener(onClick);
progressbar=(ProgressBar)findViewById(R.id.progtessBer_btn_id2);
progressbar_1=(ProgressBar)findViewById(R.id.progtessBer_btn_id1);
//设置进度条的最大值
progressbar.setMax(100000);
progressbar_1.setMax(100000);
//新开启一个进程
new Thread(new Runnable() {

@Override
public void run() {
// 循环1000次,不断地更新prostatus状态值
while (prostatus++<100000) {
//将一个Runnable对象添加到消息队列中去
//并且当执行该对象的时候,执行run
handler.post(new Runnable() {

@Override
public void run() {
//重新设置进度条当前的值
progressbar.setProgress(prostatus);
progressbar_1.setProgress(prostatus);

}
});
}
}
}).start();

}

//toast方法
private void toastshow(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();

}

}


运行效果如下:





二:用图片实现滚动效果:

1.添加图片到drawable下



2.自定义图片资源文件iamge_progress.xml

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/image_progress"
android:pivotX="50%"
android:pivotY="50%"
/>


3.定义布局文件,progress.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ProgressBar
android:indeterminateDrawable="@drawable/drawable_progress"
android:layout_height="100dp"
android:layout_width="100dp"/>
</LinearLayout>


运行效果如下:









三》自定义渐变色进度条:

定义drawable资源文件color_progressbar.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#ff9d9e9d"
android:centerColor="#ff5a5d5a"
android:centerY="0.75"
android:endColor="#ff747674"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:centerY="0.75"
android:endColor="#a0ffcb00"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress"
>
<clip>
<shape>
<corners android:radius="5dip" />
<gradient android:startColor="#FF3030"
android:endColor="#AEEEEE"
android:angle="270" />
</shape>
</clip>
</item>
</layer-list>


2.定义对应的不布局文件:progressbar.xml在此文件中引用我们定义的drawable资源配置文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<ProgressBar
android:id="@+id/color_progressBar"
android:indeterminateDrawable="@drawable/color_progress"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</LinearLayout>


或者在代码中给进度条设置自定义资源文件:

效果如下:





四:自定义progressbar颜色:

1.定义一个图片资源文件:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >

<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="8"
android:useLevel="false" >

<gradient
android:centerColor="#FFFFFF"
android:centerY="0.50"
android:endColor="#FFFF00"
android:startColor="#000000"
android:type="sweep"
android:useLevel="false" />
</shape>

</rotate>


2.定义布局文件:

<ProgressBar
android:id="@+id/color_progressBar2"
android:indeterminateDrawable="@drawable/color_progress2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>


3.效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: