timer3.zip
따로 주석은 없으니 궁금한점은 댓글 남겨주세요
숫자를 초단위로 입력받아 계산버튼을 누르면 자동으로 시간,분,초로 반환해주고 시작버튼을 누르면
카운트다운이 시작됩니다.
쉐어드프레퍼런스를 이용해 시간값을 저장했기때문에 종료했다가 켜도 마지막 시간이 그대로 남아있습니다.
공부용으로 만드느라 타이머를 구현해주는 API등은 사용하지 않았기때문에 많이 미흡합니다.
MainActivity.java
package com.example.timer3;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
SharedPreferences prefs;
Editor ePref;
Button start,go,stop,allstop;
Boolean bool = true;
EditText in;
TextView tv;
String text,Str;
int t,hour,minute,second;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button)findViewById(R.id.start);
go = (Button)findViewById(R.id.go);
stop = (Button)findViewById(R.id.stop);
allstop = (Button)findViewById(R.id.allstop);
in = (EditText)findViewById(R.id.in);
tv = (TextView)findViewById(R.id.tv);
prefs = getSharedPreferences("Save",Activity.MODE_PRIVATE);
t = prefs.getInt("t",t);
sum();
Str = String.format("%02d시간 %02d분 %02d초",hour,minute,second);
tv.setText(Str);
in.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
in.setText("");
}
});
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try{
text = in.getText().toString();
t = Integer.parseInt(text);
sum();
Str = String.format("%02d시간 %02d분 %02d초",hour,minute,second);
tv.setText(Str);
}catch(Exception e){}
}
});
go.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bool = true;
thread threadTest = new thread();
threadTest.setDaemon(true);
threadTest.start();
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bool = false;
}
});
allstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bool = false;
t = 0;
sum();
Str = String.format("%02d시간 %02d분 %02d초",hour,minute,second);
tv.setText(Str);
}
});
}
public class thread extends Thread{
public void run(){
while(bool){
handler.sendEmptyMessage(0);
try{
Thread.sleep(1000);
}catch (Exception e){}
}
}
}
Handler handler = new Handler(){
public void handleMessage(Message msg){
if(msg.what ==0){
if(t>0){
Log.d("fureun","XD");
t--;
sum();
Str = String.format("%02d시간 %02d분 %02d초",hour,minute,second);
tv.setText(Str);
}
}
}
};
public void sum(){
hour = t/3600;
minute = (t%3600)/60;
second = (t%3600)%60;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
bool = false;
ePref = prefs.edit();
ePref.putInt("t",t);
ePref.commit();
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center|top"
android:orientation="vertical"
tools:context=".Mai`nActivity" >
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="20pt"
android:gravity="center_horizontal"
android:paddingBottom="30pt"
android:paddingTop="30pt"
android:text="00시간 00분 00초" />
<EditText
android:id="@+id/in"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30pt"
android:text="시간을입력하세요"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="계산" />
<Button
android:id="@+id/go"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="시작" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="일시정지" />
<Button
android:id="@+id/allstop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="중지" />
</LinearLayout>
</LinearLayout>