總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年2月12日 星期日

MediaRecorder & MediaPlayer ~ 個人錄音(二)








按下錄音的ImageButton後, 啟動Runnable開始計時, 並改變TextView tv_timerView的值.

PersonRecordActivity.java
Runnable mUpdateTimer = new Runnable() {
    public void run() {
        updateTimerView();
    }
};

TextView tv_timerView = (TextView) findViewById(R.id.tv_timerView); 
String mTimerFormat = getResources().getString(R.string.timer_format);

private void updateTimerView() {
    long time = progress();
    Handler mHandler = new Handler(); 
    mHandler.postDelayed(mUpdateTimer, 1000); //延遲1000毫秒執行一次mUpdateTimer
    String timeStr = String.format(mTimerFormat, time / 60, time % 60);
    tv_timerView.setText(timeStr);
}

public int progress() {
    //(當前系統時間-開始錄音時的時間)/1000←轉為秒數
    return (int) ((System.currentTimeMillis() - recordingStart) / 1000);
 }

重點是String mTimerFormat載入
strings.xml
%02d:%02d

XML當地語系化資料交換格式 Xliff是XML Localization Interchange File Format 的縮寫
這就跟在strings.xml中宣告字串一樣
只是不寫死字串是什麼
而用%d, %s去取代
這樣在.java中getResources()這個字串資源時 
可以隨意塞給它string或數字


按下播放的ImageButton後, 以ProgressBar呈現檔案播放進度.

PersonRecordActivity.java
ProgressBar pb_timerView = (ProgressBar) findViewById(R.id.pb_timerView);
int recordingLength = (int) ((System.currentTimeMillis() - recordingStart) / 1000);

private void updateTimerView() {
long time = progress();
if(mState == PersonRecordService.PLAYING_STATE)
    pb_timerView.setProgress((int)(100*time / recordingLength));
}

public int progress() {
    if (mState == RECORDING_STATE || mState == PLAYING_STATE)
        return (int) ((System.currentTimeMillis() - recordingStart) / 1000);
    return 0;
}

沒有留言:

張貼留言