暑假App

簡介

實現了一個計時器APP,程序界面簡潔,只有一個時間顯示區域和兩個圖片按鈕,一個按鈕是開始/暫停,另外一個按鈕是中止。ide

功能介紹

  • 一個顯示界面,當最小計時單位爲0.1秒時,顯示爲:分鐘:秒:0.1秒。例如:03:18:9;當最小計時單位爲1秒時,顯示爲:分鐘:秒。例如:04:23
  • 兩個按鈕,左邊的是開始計時,計時過程當中點擊爲暫停計時功能右邊的按鈕爲中止計時功能。.net


  • 菜單功能有兩個,3d

    設置計時器單位有兩種可選,1秒和0.1秒code


代碼實現

  • 時間展現orm

    if (1000 == mlTimerUnit) {
            // 秒
            settingTimerUnitFlg = SETTING_SECOND_ID;
            tvTime.setText(R.string.init_time_second);
        } else if (100 == mlTimerUnit) {
            // 0.1秒
            settingTimerUnitFlg = SETTING_100MILLISECOND_ID;
            tvTime.setText(R.string.init_time_100millisecond);
        }
    // 設置時間展現
                        int min = (totalSec / 60);
                        int sec = (totalSec % 60);
                        try{
                            if (SETTING_SECOND_ID == settingTimerUnitFlg) {
                                // 秒
                                tvTime.setText(String.format("%1$02d:%2$02d", min, sec));
                            } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
                                // 0.1秒
                                tvTime.setText(String.format("%1$02d:%2$02d:%3$d", min, sec, yushu));
                            }
                        } catch(Exception e) {
                            tvTime.setText("" + min + ":" + sec + ":" + yushu);
                            e.printStackTrace();
    
                        }
                        break;

    其中變量具體含義爲
    圖變量定義blog

  • 開始暫停按鈕圖片

    View.OnClickListener startPauseListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (null == timer) {
                if (null == task) {
                    task = new TimerTask() {
                        @Override
                        public void run() {
                            if (null == msg) {
                                msg = new Message();
                            } else {
                                msg = Message.obtain();
                            }
                            msg.what = 1;
                            handler.sendMessage(msg);
                        }
                    };
                }
                timer = new Timer(true);
                timer.schedule(task, mlTimerUnit, mlTimerUnit);
            }
            // 開始
            if (!bIsRunningFlg) {
                bIsRunningFlg = true;
            } else { // 暫停
                try{
                    bIsRunningFlg = false;
                    task.cancel();
                    task = null;
                    timer.cancel(); // 取消計時
                    timer.purge();
                    timer = null;
                    handler.removeMessages(msg.what);
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };
  • 中止計時按鈕rem

    // 中止
    View.OnClickListener stopListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (null != timer) {
                task.cancel();
                task = null;
                timer.cancel(); // 取消計時
                timer.purge();
                timer = null;
                handler.removeMessages(msg.what);
            }
            mlCount = 0;
            bIsRunningFlg = false;
            if (SETTING_SECOND_ID == settingTimerUnitFlg) {
                // 秒
                tvTime.setText(R.string.init_time_second);
            } else if (SETTING_100MILLISECOND_ID == settingTimerUnitFlg) {
                // 100 毫秒
                tvTime.setText(R.string.init_time_100millisecond);
            }
        }
    };
  • 設置菜單get

    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

    設置子菜單虛擬機

    // 設置子菜單的名稱
        SubMenu settingMenu = menu.addSubMenu(0, SETTING_TIMER_UNIT_ID, 0, R.string.menu_setting_timer_unit).setIcon(R.drawable.setting);
        // 按對應的名稱增長子菜單
        settingMenu.add(1, SETTING_SECOND_ID, 0, R.string.menu_setting_second);
        settingMenu.add(1, SETTING_100MILLISECOND_ID, 1, R.string.menu_setting_100milisec);
        // 退出
        menu.add(0, EXIT_ID, 2, R.string.menu_exit).setIcon(R.drawable.exit);

    選擇菜單

    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case SETTING_TIMER_UNIT_ID:
                break;
            case EXIT_ID:
                finish(); // 退出應用
                break;
            case SETTING_SECOND_ID: // 秒
                if (SETTING_SECOND_ID != settingTimerUnitFlg) {
                    mlTimerUnit = 1000;
                    settingTimerUnitFlg = SETTING_SECOND_ID;
                }
                tvTime.setText(R.string.init_time_second);
                break;
            case SETTING_100MILLISECOND_ID: // 100毫秒
                if (SETTING_100MILLISECOND_ID != settingTimerUnitFlg) {
                    mlTimerUnit = 100;
                    settingTimerUnitFlg = SETTING_100MILLISECOND_ID;
                }
                tvTime.setText(R.string.init_time_100millisecond);
                break;
            default:
                break;
        }
  • 遇到的問題
    菜單項如今顯示不出來,本來最初仍是右上角有三個點的菜單項,可是奇妙的是過了一段時間後運行發現那個菜單項不顯示了,開始覺得是代碼出錯了,檢查以後發現沒有問題,以爲多是系統不顯示了,網上有不少解決這個問題的辦法,但嘗試屢次後都沒有用,而後又嘗試了使用不一樣的方法建立菜單,結果都不顯示,後來看到這篇文章安卓模擬器的菜單鍵找不到在什麼位置,以爲我可能跟這個同樣吧,後來又查找到在虛擬機上運行時,按快捷鍵Ctrl+M能夠顯示菜單,嘗試以後個人菜單項終於出來了!雖然仍是不能直接顯示。

反思與總結

這個APP的功能不多,待改進的地方不少,應該說從一開始就沒想着作一個很複雜的APP,對本身的要求過低了。可是從這個過程當中仍是學到了一些技巧,但願之後能繼續加油,爭取作處更好的。

相關文章
相關標籤/搜索