花了一个上午的时间,查了许多资料和官方文档,总结了一下自己如何利用seekbar做出类似于按侧边控件弹出的音量控制。
我是利用按下喇叭按钮。然后,弹出一个Alertdialog,其中用到了setAdapter方法,见一个baseadapter加载进去。如下:
Builder builder=new AlertDialog.Builder(mcontext);
builder.setAdapter(adapter,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).create().show();
不多说了,先贴上代码:
/**
* 调整音量
*/
private void adjustVoice() {
// TODO Auto-generated method stub
Builder builder=new AlertDialog.Builder(mcontext);
BaseAdapter adapter=new BaseAdapter() {//
class Holder{
SeekBar seekbar;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//final SeekBar replaceseekbar;
LayoutInflater inflater=LayoutInflater.from(mcontext);
Holder holder=null;
if(convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.hsp_seekbar, null);
holder.seekbar=(SeekBar) convertView.findViewById(R.id.seekBar1);
convertView.setTag(holder);
}
else{
holder=(Holder)convertView.getTag();
}
final AudioManager audio=(AudioManager) mcontext.getSystemService(Context.AUDIO_SERVICE);
int currentvolume=audio.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//get the current volume
int maxvolume=audio.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//get the max volume
holder.seekbar.setProgress(currentvolume*100/maxvolume);//初始化音量
Log.e("VOLUME", String.valueOf(currentvolume*100/maxvolume));//必须先*100,否则会为0
holder.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
//调整音量的核心代码处
Log.e("VOLUME1", String.valueOf(progress));//测试
Log.e("VOLUME2", String.valueOf(progress/20));//测试
audio.setStreamVolume(AudioManager.STREAM_VOICE_CALL, progress/20, 0);
seekBar.setProgress(progress);
}
});
return convertView;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return 1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 1;
}
};
builder.setAdapter(adapter,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).create().show();
}
在下面是我的seekbar的xml:(aa去掉下面)
R.layout.hsp_seekbar.xml
点击喇叭按钮就可以出现你要的效果啦!