Android studio如何编写秒表程序?
1、新建一个类(StopWatchView)并扩展自LinearLayout,并将其用作布局。<myapp造婷用痃lication.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、@Overrideprotected void onFinishInflate(){super.onFinishInflate();// 为每个相应的TextView控件设置成0tvHour = (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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void run() {handler.sendEmptyMessage(MSG_WHAT_SHOW_TIME);}};// 开始计时timer.schedule(showTimeTask,200,200);}// 开始private void startTimer(){if(timerTask == null){timerTask = new TimerTask() {@Overridepublic 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;}};};