Android ProgressBar SeekBar

高斋晓开卷,独共圣人语。这篇文章主要讲述Android ProgressBar SeekBar相关的知识,希望能为你提供帮助。
1、ProgressBar 进度条
当水平进度条完成后,隐藏该进度条,并显示一张图片

Android ProgressBar SeekBar

文章图片

常用属性:
1. android:max 设置进度条的最大值
2. android:progress 用于指定进度条的已完成的进度值
3. android:progressDrawable 用于设置进度条的轨道绘制形式
style属性:
1. ?android:attr/progressBarStyleHorizontal 细水平长条进度条
2. ?android:attr/progressBarStyleLarge 在圆形进度条
3. ?android:attr/progressBarStyleSmall 大圆形进度条
4. @android:style/Widget.ProgressBar.Large 大跳跃,旋转画面的进度条
5. @android:style/Widget.ProgressBar.Small 小跳跃,旋转画面的进度条
6. @android:style/Widget.ProgressBar.Horizontal 粗水平长条进度条
ProgressBar的水平样式中自身是不会动的,必须在代码中设置进度才会改变。
public synchronized void setProgress(int progress)//设置进度
 
 
Android ProgressBar SeekBar

文章图片
Android ProgressBar SeekBar

文章图片
1 < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2android:layout_width="match_parent" 3android:layout_height="match_parent" 4android:orientation="vertical" > 5 6< ProgressBar 7android:id="@+id/progressBar3" 8style="?android:attr/progressBarStyleHorizontal" 9android:layout_width="match_parent" 10android:layout_height="wrap_content" 11android:layout_centerInParent="true" 12android:layout_margin="20dp" 13android:progress="40" /> 14 15< TextView 16android:id="@+id/tv" 17android:layout_width="wrap_content" 18android:layout_height="wrap_content" 19android:layout_alignRight="@id/progressBar3" 20android:layout_below="@id/progressBar3" 21android:text="0/100" /> 22 23< ImageView 24android:id="@+id/img" 25android:layout_centerInParent="true" 26android:layout_width="wrap_content" 27android:layout_height="wrap_content" 28android:src="https://www.songbingjia.com/android/@drawable/ic_launcher" 29android:visibility="gone" /> 30 31 < /RelativeLayout>

activity_main.xml 
一般能知道具体操作时间的使用水平,比如复制文件,而有些不知道操作时间的使用圆
形进度条,如请求网络。

ProgressBar是在前台提示用户,而执行任务一般都是后台,但是安卓不允许后台线程直
接操作UI,所以,我们一般在需要处理UI时,需要通知主线程,实现原理我们后面再详
谈,我们的子线程如果在Activity中,可以先使用runOnUiThread来操作主线程
Android ProgressBar SeekBar

文章图片
Android ProgressBar SeekBar

文章图片
1 public class MainActivity extends Activity { 2ProgressBar bar; 3TextView tv; 4ImageView img; 5 6@Override 7protected void onCreate(Bundle savedInstanceState) { 8super.onCreate(savedInstanceState); 9setContentView(R.layout.activity_main); 10bar = (ProgressBar) findViewById(R.id.progressBar3); 11tv = (TextView) findViewById(R.id.tv); 12img = (ImageView) findViewById(R.id.img); 13 14bar.setMax(100); 15new Thread() { 16public void run() { 17// 模拟耗时任务 18int index = 0; 19while (index++ < 100) { 20try { 21Thread.sleep(100); 22 23// 修改ProgressBar进度 24// 做UI修改,所以直接可以在子线程中修改UI 25bar.setProgress(index); 26} catch (Exception e) { 27e.printStackTrace(); 28} 29// 使用UI线程 30runOnUiThread(new Runnable() { 31 32@Override 33public void run() { 34tv.setText(bar.getProgress() + "/" 35+ bar.getMax()); 36 37if (bar.getProgress() == bar.getMax() 38& & img.getVisibility() == View.GONE) { 39bar.setVisibility(View.GONE); 40tv.setVisibility(View.GONE); 41img.setVisibility(View.VISIBLE); 42} 43} 44}); 45} 46 47}; 48}.start(); 49} 50 51 }

MainActivity.java 
2、SeekBar 拖动条
拖动条与进度条类似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某中数值
的调节,例如,调节图片的透明度或是音量等.
Android ProgressBar SeekBar

文章图片

常用属性:
1. android:max="100" 进度条的最大值
2. android:padding="10px" 进度条的边距
3. android:progress="50" 进度条的初始值
 
并且我们一般都需要给SeekBar一个拖动的监听,当用户操作后,我们需要根据操作的值来调
整我们的程序
 
Android ProgressBar SeekBar

文章图片
Android ProgressBar SeekBar

文章图片
1 < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2android:layout_width="match_parent" 3android:layout_height="match_parent" > 4 5< SeekBar 6android:id="@+id/seekbar" 7android:layout_width="match_parent" 8android:layout_height="wrap_content" 9android:layout_alignParentLeft="true" 10android:layout_alignParentTop="true" 11android:layout_marginTop="150dp"/> 12 13< TextView 14android:id="@+id/tv" 15android:layout_width="wrap_content" 16android:layout_height="wrap_content" 17android:layout_alignRight="@id/seekbar" 18android:layout_below="@id/seekbar" 19android:text="0/100"/> 20 21< RatingBar 22android:layout_width="match_parent" 23android:layout_height="wrap_content" 24android:layout_alignParentRight="true" 25android:layout_below="@id/tv" 26android:layout_marginTop="150dp" 27android:numStars="6" 28android:rating="3"/> 29 < /RelativeLayout>

activity_main.xml 
所有的操作系统的,都需要Service系统服务
manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
Android ProgressBar SeekBar

文章图片
Android ProgressBar SeekBar

文章图片
1 public class MainActivity extends Activity { 2 3SeekBar seekbar; 4TextView tv; 5AudioManager manager; 6 7@Override 8protected void onCreate(Bundle savedInstanceState) { 9super.onCreate(savedInstanceState); 10setContentView(R.layout.activity_main); 11seekbar = (SeekBar) findViewById(R.id.seekbar); 12tv = (TextView) findViewById(R.id.tv); 13 14seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 15 16@Override 17public void onStopTrackingTouch(SeekBar seekBar) { 18// 拖拽完毕 19 20} 21 22@Override 23public void onStartTrackingTouch(SeekBar seekBar) { 24// 开始拖拽时,用户刚好点上去 25 26} 27 28@Override 29public void onProgressChanged(SeekBar seekBar, int progress, 30boolean fromUser) { 31// 每次进度改变都会调用 32// 是否是用户改变? 33if (fromUser) { 34tv.setText(progress + "/" + seekbar.getMax()); 35} 36// flags用来,改变时是否需要声音,是否需要UI 37manager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 38AudioManager.FLAG_SHOW_UI 39| AudioManager.FLAG_PLAY_SOUND); 40} 41}); 42 43// 获取系统服务 44// 获取音频管理器 45manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 46// 获取系统音量最大值 0-15 47final int max = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 48// 当前音量值 49final int volumn = manager.getStreamVolume(AudioManager.STREAM_MUSIC); 50seekbar.setMax(max); 51seekbar.setProgress(volumn); 52runOnUiThread(new Runnable() { 53@Override 54public void run() { 55tv.setText(volumn + "/" + max); 56} 57}); 58 59} 60 61// 音量加减 62@Override 63public boolean onKeyUp(int keyCode, KeyEvent event) { 64if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 65seekbar.setProgress(seekbar.getProgress() + 1); 66runOnUiThread(new Runnable() { 67@Override 68public void run() { 69tv.setText(seekbar.getProgress() + "/" + seekbar.getMax()); 70} 71}); 72} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 73seekbar.setProgress(seekbar.getProgress() - 1); 74runOnUiThread(new Runnable() { 75@Override 76public void run() { 77tv.setText(seekbar.getProgress() + "/" + seekbar.getMax()); 78} 79}); 80} 81return super.onKeyUp(keyCode, event); 82} 83 84 }

MainActivity.java【Android ProgressBar SeekBar】 

    推荐阅读