실행화면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/timeView" android:layout_width="match_parent" android:layout_height="100dp" android:background="@drawable/timer" android:gravity="center" android:text="00:00:00:00" android:textColor="@color/myBlack" android:textSize="35dp" android:textStyle="bold" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="20dp"> <Button android:id="@+id/btn_start" android:layout_width="match_parent" android:layout_height="70dp" android:background="@drawable/button" android:text="시작" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_record" android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:layout_marginRight="3dp" android:background="@drawable/button" android:text="기록" android:textColor="@color/myBlack" android:visibility="invisible" /> <Button android:id="@+id/btn_pause" android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:layout_marginRight="3dp" android:background="@drawable/button" android:text="일시정지" android:textColor="@color/myBlack" android:visibility="invisible" /> <Button android:id="@+id/btn_stop" android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:background="@drawable/button" android:text="중지" android:textColor="@color/myBlack" android:visibility="invisible" /> </LinearLayout> </RelativeLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="20dp" android:text="기록" android:textColor="@color/myBlack" android:textSize="22dp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="5dp" android:background="@color/mainColor"> </View> <TextView android:id="@+id/recordView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="15dp" android:text="" android:textColor="@color/myBlack" android:textSize="22dp" /> </LinearLayout> </ScrollView> | cs |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | import android.annotation.SuppressLint; import android.content.res.Configuration; import android.graphics.Color; import android.os.Build; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button mStartBtn, mStopBtn, mRecordBtn, mPauseBtn; private TextView mTimeTextView, mRecordTextView; private Thread timeThread = null; private Boolean isRunning = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Build.VERSION.SDK_INT >= 21) { getWindow().setStatusBarColor(Color.parseColor("#4ea1d3")); } mStartBtn = (Button) findViewById(R.id.btn_start); mStopBtn = (Button) findViewById(R.id.btn_stop); mRecordBtn = (Button) findViewById(R.id.btn_record); mPauseBtn = (Button) findViewById(R.id.btn_pause); mTimeTextView = (TextView) findViewById(R.id.timeView); mRecordTextView = (TextView) findViewById(R.id.recordView); mStartBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setVisibility(View.GONE); mStopBtn.setVisibility(View.VISIBLE); mRecordBtn.setVisibility(View.VISIBLE); mPauseBtn.setVisibility(View.VISIBLE); timeThread = new Thread(new timeThread()); timeThread.start(); } }); mStopBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setVisibility(View.GONE); mRecordBtn.setVisibility(View.GONE); mStartBtn.setVisibility(View.VISIBLE); mPauseBtn.setVisibility(View.GONE); mRecordTextView.setText(""); timeThread.interrupt(); } }); mRecordBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mRecordTextView.setText(mRecordTextView.getText() + mTimeTextView.getText().toString() + "\n"); } }); mPauseBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { isRunning = !isRunning; if (isRunning) { mPauseBtn.setText("일시정지"); } else { mPauseBtn.setText("시작"); } } }); } @SuppressLint("HandlerLeak") Handler handler = new Handler() { @Override public void handleMessage(Message msg) { int mSec = msg.arg1 % 100; int sec = (msg.arg1 / 100) % 60; int min = (msg.arg1 / 100) / 60; int hour = (msg.arg1 / 100) / 360; //1000이 1초 1000*60 은 1분 1000*60*10은 10분 1000*60*60은 한시간 @SuppressLint("DefaultLocale") String result = String.format("%02d:%02d:%02d:%02d", hour, min, sec, mSec); if (result.equals("00:01:15:00")) { Toast.makeText(MainActivity.this, "1분 15초가 지났습니다.", Toast.LENGTH_SHORT).show(); } mTimeTextView.setText(result); } }; public class timeThread implements Runnable { @Override public void run() { int i = 0; while (true) { while (isRunning) { //일시정지를 누르면 멈춤 Message msg = new Message(); msg.arg1 = i++; handler.sendMessage(msg); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); runOnUiThread(new Runnable(){ @Override public void run() { mTimeTextView.setText(""); mTimeTextView.setText("00:00:00:00"); } }); return; // 인터럽트 받을 경우 return } } } } } } | cs |
MainActivity.java
Drawable 폴더에 넣어주세요
참고 자료
https://kutar37.tistory.com/entry/Thread-handler%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%8A%A4%ED%83%91%EC%9B%8C%EC%B9%98
728x90
'# App > Android(JAVA)' 카테고리의 다른 글
[안드로이드 스튜디오] RecyclerView 삭제 버튼 만들기 (0) | 2018.11.11 |
---|---|
[안드로이드 스튜디오] 나만의 툴바 만들기 (0) | 2018.11.10 |
[안드로이드 스튜디오] 프로젝트 생성 후 렌더링 오류 (0) | 2018.10.31 |
[안드로이드 스튜디오] Status Bar (상태바) 색상 설정하기 (0) | 2018.10.25 |
[안드로이드 스튜디오] 간단한 테두리 설정하기 (0) | 2018.10.25 |
[안드로이드스튜디오] 스크롤뷰 안에 리사이클러뷰 넣기 (0) | 2018.10.21 |
[안드로이드스튜디오] 가로 회전 만들기 (0) | 2018.10.21 |