关于自定义progressBar的制作
progressBar:
1.
progressBar存在两种进度, android:progress和android:secondaryProgress。
android:progress:分为精确的和不精确的,android:indeterminate="true|false"来决定进度条是否是精确的;精确的意思是我们能够明确的看到
进度在进度条中的长度变化,而不确定的则是在进度条上看不到进度的变化。
当我们不知道一个操作需要多久来完成,这个时候就
需要用到不确定的Progressbar ;
andorid:secondaryProgress:是为缓存需要涉及的,看电影电视剧时,会有一条缓存的进度条,缓存的进度条就是android:secondaryProgress。
不精确显示的进度条 精确显示的进度条
2.progressBar的样式总的来说有两种,一种是水平的,一种是环形的。
Widget.ProgressBar.Horizontal
Widget.ProgressBar.Small
Widget.ProgressBar.Large
Widget.ProgressBar.Inverse
Widget.ProgressBar.Small.Inverse
Widget.ProgressBar.Large.Inverse
Widget.ProgressBar.Small
Widget.ProgressBar.Large
Widget.ProgressBar.Inverse
Widget.ProgressBar.Small.Inverse
Widget.ProgressBar.Large.Inverse
细节我就不多说了 , 下面咱们来看列子
要制作一个能及时看到进度值得进度条是很多软件需要做的,这里我只介绍上面数字的的实现
import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends Activity {
ImageView imageView;
ClipDrawable clipDrawable;
ProgressBar progressBar1;
TextView show_progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
clipDrawable = (ClipDrawable) imageView.getDrawable();
progressBar1 = (ProgressBar) findViewById(R.id.horizontal_bar);
show_progress = (TextView) findViewById(R.id.show_progress);
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x132)
{
System.out.println(clipDrawable.getLevel());
// 设置当前的进度值
progressBar1.setProgress(progressBar1.getProgress()+1);
// 获取进度条的长度
int len = progressBar1.getWidth();
// 获取当前的进度值
int current_progress = progressBar1.getProgress();
// 获取进度条的开始x轴位置
int beginx = (int) progressBar1.getX();
// 根据计算获得当前进度的位置
int currentX = (int) ((current_progress/100.0f)*len);
// 获取进度条的结束位置
int endX = len+beginx;
show_progress.setX(currentX);
show_progress.setText(current_progress+"%");
System.out.println("begin:"+beginx+"currentx"+currentX+"end"+endX);
clipDrawable.setLevel(clipDrawable.getLevel()+100);
}
}
};
new Timer().schedule(new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = 0x132;
handler.sendMessage(msg);
if (clipDrawable.getLevel()>10000)
cancel();
}
},0,300);
}
从代码中可以知道显示数字的只是一个TextView,只是动态的改变他的X坐标就可以让他随着进度改变。
代码包会随后给出。有什么问题可以问我。