一.拖动条的基础知识
拖动条与进度条类似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某中数值 的调节,例如,调节图片的透明度或是音量等.
(一)XML中设置:
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:padding="10px"
android:progress="50" />
(二)常用属性:
- android:max=”100” 进度条的最大值
- android:padding=”10px” 进度条的边距
- android:progress=”50” 进度条的初始值
并且我们一般都需要给SeekBar一个拖动的监听,当用户操作后,我们需要根据操作的值来调整我们的程序
(三)监听事件:
//监听拖动条值变化事件
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//当用户停止拖动时
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//当用户开始拖动时
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress ,
boolean fromUser) {
//当进度改变时
//progress代表改变的进度值
//而fromUser代表是否是用户的操作改变的,如果为false,一般是我们代码中进行了进度设置。如果为true代表的是用户手动拖动拖动条。
}
});
二.拖动条实现改变手机音量的示例
(一)布局文件代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="185dp" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/seekBar1"
android:layout_below="@id/seekBar1"
android:text="0/100" />
</RelativeLayout>
(二)java代码设计
package com.example.lesson7_seekbar;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
//定义布局内的控件
SeekBar seekBar;//拖动条
TextView tv;//显示音量大小
AudioManager manager;//音量管理器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化
seekBar = (SeekBar) findViewById(R.id.seekBar1);
tv = (TextView) findViewById(R.id.tv);
//给拖动条设置拖动的监听事件
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// 拖拽完毕
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// 开始拖拽时 用户刚好点上去
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// 每次进度改变都会调用
// 是否是用户改变的呢???
// if (fromUser) {
tv.setText(progress + "/" + seekBar.getMax());
// }
// 拖动进度条,我需要改变音量
// flags用来 需不需要声音 是否需要ui
manager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,
AudioManager.FLAG_SHOW_UI
| AudioManager.FLAG_PLAY_SOUND);
}
});
// seekBar.setMax(200);
// seekBar.setProgress(50);
// 获取系统服务
// 获取音频管理器
manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
// 获取他的最大值 0-15
int max = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
seekBar.setMax(max);
// 本来就有一个声量值
int volumn = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
Log.e("TAG", volumn + " ");
seekBar.setProgress(volumn);
}
/**
* 监听手机音量键 的回调方法
* 如果使用音量键来改变手机音量,拖动条也改变
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
// ++
seekBar.setProgress(seekBar.getProgress() + 1);
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
seekBar.setProgress(seekBar.getProgress() - 1);
}
return super.onKeyUp(keyCode, event);
}
}
程序运行后的界面:
拖动进度条显示的界面:
这就是进度条的简单应用示例。