Android seekbar(사용자 정의)볼 륨 동기 화 업데이트 제어
개발 자로 서 seekbar 는 반드시 만 날 수 있 습 니 다.그러면 seekbar 와 seekbar 가 제어 하 는 볼 륨 을 어떻게 시스템 의 seekbar 볼 륨 과 동기 화 하 는 지 사용자 정의 할 수 있 습 니 다.오늘 은 드 롭 다운 메뉴 에 SeekBar 제어 볼 륨 을 추가 합 니 다(Android 5.1 시스템)
사용자 정의 Seekbar
사용자 정의 효과 도 를 살 펴 보 겠 습 니 다:
먼저 레이아웃 파일 을 살 펴 보 겠 습 니 다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ringtone_seekbar_parent"
android:layout_width="match_parent"
android:layout_height="160px"
android:layout_marginTop="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="25dip"
android:background="@drawable/zf_notify_quicksetting_ringtone" />
<SeekBar
android:id="@+id/ringtone_seekbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:maxHeight="49px"
android:minHeight="49px"
android:paddingEnd="40dp"
android:paddingStart="25dp"
android:progress="60"
android:progressDrawable="@drawable/zf_progress_horizontal"
android:splitTrack="false"
android:thumb="@drawable/zf_noti_scrubber_control_normal"
android:thumbOffset="0px" />
</LinearLayout>
안 드 로 이 드:progressDrawable="@drawable/zfprogress_horizontal" zfprogress_horizontal.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" android:drawable="@drawable/progress_gray"/>
<item android:id="@android:id/progress" android:drawable="@drawable/progress_blue"/>
</layer-list>
이 안에 두 장의 그림 이 있 습 니 다.아래 그림 은 각각 이 두 장의 효과 입 니 다. @drawable/progress_blue 와@drawable/progressgraythumb="@drawable/zf 에 대하 여noti_scrubber_control_normal"이것 은 누 르 는 단추 그림 입 니 다.
자,레이아웃 코드 는 여기까지 입 니 다.나머지 는 볼 륨 을 조절 하 는 코드 입 니 다.
2.시스템 seekbar 볼 륨 과 동기 화 업데이트
1.먼저 볼 륨 조절 코드 를 살 펴 본다.
다음 경로 의 코드 열기
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.Java proctected Phone Status BarView MakeStatus BarView(){}방법 에 ID 를 등록 한 다음 제어 코드 를 구현 합 니 다.
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);//
mVoiceSeekBar= (SeekBar) mStatusBarWindow.findViewById(R.id.ringtone_seekbar);// ID
mVoiceSeekBar.setMax(15);//
mVoiceSeekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));//
myRegisterReceiver();//
Log.i("lyj_ring", "mVoiceSeekBar max voluem = "+audioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM));
mVoiceSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub
}
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
Log.v("lyj_ring", "mVoiceSeekBar max progress = "+arg1);
//
audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, arg1, 0);
audioManager.setStreamVolume(3, arg1, 0);// 3 AudioManager.STREAM_MUSIC
}
});
mVoiceObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
mVoiceSeekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM));
// , 。
//mVoiceSeekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
}
};
코드 를 보면 seekbar 가 바 뀌 었 을 때 시스템 볼 륨 과 미디어 볼 륨 이 동시에 바 뀌 었 다 는 것 을 알 수 있 습 니 다.AudioManager.STREAM_SYSTEM 과 AudioManager.STREAMMUSIC。감청 상태 가 바 뀔 때 도 언론 볼 륨 으로 변 화 를 감청 할 수 있다.효 과 는 모두 같다.
2.시스템 seekbar 제어 볼 륨 과 동기 화 업데이트
주로 감청 음량 이 바 뀌 었 습 니 다.예,방송 입 니 다.실 현 된 코드 를 살 펴 보 겠 습 니 다.
/**
*
*/
private void myRegisterReceiver(){
MyVolumeReceiver mVolumeReceiver = new MyVolumeReceiver() ;
IntentFilter filter = new IntentFilter() ;
filter.addAction("android.media.VOLUME_CHANGED_ACTION") ;
mContext.registerReceiver(mVolumeReceiver, filter) ;
}
/**
*
* @author long
*/
private class MyVolumeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// seekbar
if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){
AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int currVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) ;//
mVoiceSeekBar.setProgress(currVolume) ;
}
}
}
이 안에 있 는 my RegisterReceiver()방법 은 1 의 코드 에 이미 등록 되 어 있 으 며,이렇게 하면 전체 기능 이 실 현 됩 니 다.이 과정 에서 기능 의 실현 이 매우 간단 하 다 고 느 꼈 다.관건 은 seekbar 진도 바 와 시스템 의 볼 륨 진도 바 를 실시 간 으로 업데이트 하 는 것 이다.이것 이 관건 이다.이상 은 모든 제어 코드 입 니 다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.여러분,본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.