Android studio如何编写秒表程序?

2025-11-22 00:23:22

1、新建一个类(StopWatchView)并扩展自LinearLayout,并将其用作布局。

<myapplication.nomasp.com.clock.stopwatchview :="" android="" id="@+id/tabStopWatch" layout_height="match_parent" layout_width="match_parent" orientation="vertical">

    <linearlayout :="" android="" layout_height="wrap_content" layout_width="match_parent" orientation="horizontal">

    <textview :="" android="" id="@+id/tvHour" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text=":" textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" id="@+id/tvMinute" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text=":" textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" id="@+id/tvSecond" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" layout_height="wrap_content" layout_width="wrap_content" text="." textappearance="?android:attr/textAppearanceLarge">

    <textview :="" android="" id="@+id/tvMSceond" layout_height="wrap_content" layout_weight="1" layout_width="0dp" textappearance="?android:attr/textAppearanceLarge">

    < / LinearLayout>

    <listview :="" android="" id="@+id/lvWatchTimeList" layout_height="0dp" layout_weight="1" layout_width="match_parent">

    < / ListView>

    <linearlayout :="" android="" layout_height="wrap_content" layout_width="match_parent" orientation="horizontal"><button :="" android="" id="@+id/btnSWStart" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/start"></button><button :="" android="" id="@+id/btnSWPause" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/pause"></button><button :="" android="" id="@+id/btnSWResume" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/resume"></button><button :="" android="" id="@+id/btnSWRecord" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/record"></button></linearlayout></listview></textview></textview></textview></textview></textview></textview></textview></linearlayout></myapplication.nomasp.com.clock.stopwatchview>

<button :="" android="" id="@+id/btnSWReset" layout_height="wrap_content" layout_weight="1" layout_width="0dp" text="@string/reset">

</button>

2、StopWatchView

同样是一开始要定义好的这些balabala的东西:

private int tenMSecs = 0;

    private Timer timer = new Timer();

    private TimerTask timerTask = null;

    private TimerTask showTimeTask = null;

    private TextView tvHour, tvMinute, tvSecond, tvMSecond;

    private Button btnSWStart, btnSWResume, btnSWReset, btnSWPause, btnSWRecord;

    private ListView lvWatchTimeList;

    private ArrayAdapter<string> adapter;

    private static final int MSG_WHAT_SHOW_TIME = 1;

    public StopWatchView(Context context) {

        super(context);

    }

    public StopWatchView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public StopWatchView(Context context, AttributeSet attrs, int defStyleAttr) {

        super(context, attrs, defStyleAttr);

    }

3、@Override

    protected void onFinishInflate(){

        super.onFinishInflate();

        // 为每个相应的TextView控件设置成0

        tvHour = (TextView)findViewById(R.id.tvHour);

        tvHour.setText(0);

        tvMinute = (TextView)findViewById(R.id.tvMinute);

        tvMinute.setText(0);

        tvSecond = (TextView)findViewById(R.id.tvSecond);

        tvSecond.setText(0);

        tvMSecond = (TextView)findViewById(R.id.tvMSceond);

        tvMSecond.setText(0);

        // 为每个Button设置监听事件

        btnSWRecord = (Button)findViewById(R.id.btnSWRecord);

        btnSWRecord.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                adapter.insert(String.format(%d:%d:%d.%d,

                        tenMSecs/100/60/60,

                        tenMSecs/100/60%60,

                        tenMSecs/100%60,

                        tenMSecs%100),

                        0);

            }

        });

        btnSWPause = (Button)findViewById(R.id.btnSWPause);

        btnSWPause.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                // 停止

                stopTimer();

                btnSWPause.setVisibility(View.GONE);

                btnSWResume.setVisibility(View.VISIBLE);

                btnSWReset.setVisibility(View.VISIBLE);

                btnSWRecord.setVisibility(View.GONE);

            }

        });

        btnSWReset = (Button)findViewById(R.id.btnSWReset);

        btnSWReset.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                // 停止

                stopTimer();

                tenMSecs = 0;

                adapter.clear();

                btnSWStart.setVisibility(View.VISIBLE);

                btnSWPause.setVisibility(View.GONE);

                btnSWReset.setVisibility(View.GONE);

                btnSWRecord.setVisibility(View.GONE);

                btnSWResume.setVisibility(View.GONE);

            }

        });

        btnSWResume = (Button)findViewById(R.id.btnSWResume);

        btnSWResume.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                // 开始

                startTimer();

                btnSWResume.setVisibility(View.GONE);

                btnSWReset.setVisibility(View.GONE);

                btnSWRecord.setVisibility(View.VISIBLE);

                btnSWPause.setVisibility(View.VISIBLE);

            }

        });

        btnSWStart = (Button)findViewById(R.id.btnSWStart);

        btnSWStart.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                // 开始

                startTimer();

                btnSWStart.setVisibility(View.GONE);

                btnSWPause.setVisibility(View.VISIBLE);

                btnSWRecord.setVisibility(View.VISIBLE);

            }

        });

        btnSWRecord.setVisibility(View.GONE);

        btnSWPause.setVisibility(View.GONE);

        btnSWReset.setVisibility(View.GONE);

        btnSWResume.setVisibility(View.GONE);

        // 将适配器添加到列表

        lvWatchTimeList = (ListView)findViewById(R.id.lvWatchTimeList);

        adapter = new ArrayAdapter<string>(getContext(),

                android.R.layout.simple_list_item_1);

        lvWatchTimeList.setAdapter(adapter);

        // 向Handler发送消息

        showTimeTask = new TimerTask() {

            @Override

            public void run() {

                handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);

            }

        };

        // 开始计时

        timer.schedule(showTimeTask,200,200);

    }

    // 开始

    private void startTimer(){

        if(timerTask == null){

            timerTask = new TimerTask() {

                @Override

                public void run() {

                    tenMSecs++;

                }

            };

            timer.schedule(timerTask,10,10);

        }

    }

    // 结束

    private void stopTimer(){

        if(timerTask != null){

            timerTask.cancel();

            timerTask = null;

        }

    }

    // 取消计时

    public void onDestory(){

        timer.cancel();

    }

    private Handler handler = new Handler(){

        public void handleMessage(Message msg){

            switch (msg.what){

                // 如果消息匹配,则将相应时间计算后显示在相应TextView上

                case MSG_WHAT_SHOW_TIME:

                    tvHour.setText(tenMSecs/100/60/60+);

                    tvMinute.setText(tenMSecs/100/60%60+);

                    tvSecond.setText(tenMSecs/100%60+);

                    tvMSecond.setText(tenMSecs%100+);

                    break;

                default:

                    break;

            }

        };

    };

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢