Android seekbar(사용자 정의)볼 륨 동기 화 업데이트 제어

6910 단어 Androidseekbar
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/progressgray
 

thumb="@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 진도 바 와 시스템 의 볼 륨 진도 바 를 실시 간 으로 업데이트 하 는 것 이다.이것 이 관건 이다.이상 은 모든 제어 코드 입 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.여러분,본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기