「科技始終來自於惰性」,我相信有很多人都跟我一樣認同這句話。

若是一個App一直要求使用者輸入資訊才能動作,那我相信沒多久該App就會被淘汰了。

因此要能把使用者輸入過的資訊記錄起來,方便使用者不需重複輸入,或是輸入時只要改某些地方就好。

故此篇將提到:如何記錄使用者輸入過的資訊(SharedPreferences)以及計算BMI後圖片的旋轉(RotateAnimation)。

SharedPreferences,這玩意兒是個小資料庫,可以用於記錄使用者的資料。

所以先寫兩個function,方便做為寫入資料與讀取資料,資料寫入時必須使用commit()存入資料。

public void saveData() {
profile.edit().putString(heightField, editTextHeight.getText().toString()).putString(weightField, editTextWeight.getText().toString()).commit();
}

讀出資料時,第一個參數是KEY的名稱,第二個參數則為若第一個參數抓不到值時的預設值。

public void readData() {
editTextHeight.setText(profile.getString(heightField, ""));
editTextWeight.setText(profile.getString(weightField, ""));
}

當按下開始計算Button後,就會取得EditText中的值進行防呆判斷,防止使用者未輸入完全,並且紀錄使用者輸入的資訊。

public void startCalculate(View v) {
textHeight = editTextHeight.getText().toString();
textWeight = editTextWeight.getText().toString();
saveData();
if(isValidAge(textHeight, textWeight))
calculateBmi();
}

至於BMI的算法我就不贅述了,得到BMI後便帶入控制圖片旋轉的funtion,讓圖片轉到正確的角度。

讓圖片旋轉使用的是RotateAnimation,其第一參數為起點角度,第二參數為終點角度,第三參數為要在多久時間內轉完,第四參數為要轉幾次。

此外,這邊要特別敘述setFillAfter(),若為true,則圖片會固定在旋轉後的位置。

public void rotate(float start, float end, int duration, int reset) {
rotate_Animation = new RotateAnimation(start, end, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotate_Animation.setDuration(duration);
rotate_Animation.setRepeatCount(reset);
rotate_Animation.setFillAfter(true);
imageViewCircle.startAnimation(rotate_Animation);
}

至此,輸入與結果輸出告一段落...但總感覺還少了些什麼?

bmi_calculator_0004.gif  

嗯......我知道了!少了樂趣!如此枯燥乏味一點樂趣都沒有,那麼下一篇就會讓它變得有趣一點。

順便一提,此篇的code可到這裡去抓。

,

scarletdream 發表在 痞客邦 PIXNET 留言(0) 人氣()