profile image

L o a d i n g . . .

반응형



안드로이드 개인 세미 프로젝트 ~ 스터디 스탑워치

Android personal SemiProject ~ Study StopWatch

강의를 보고 배운것들을 간단하게 사용해보고자 시작한 안드로이드 세미프로젝이다.

역시 구글링을 통해 배우면서 코딩을 하고 있으며, 앞으로도 많은 구글링을 할 것 같다.

이것도 실력 키우는데 겪는 과정이라고 생각한다. 웹개발 공부할때도 비슷했으니..

머릿속에서는 어느정도 이렇게 하면 되지 않을까? 라고 생각이 들지만, 손은 움직이지 않았다...ㅠㅠ


It's an Android SemiProject that started to use simple thing that learned from the lecture

Also, i'm learing and coding through Google, now and forever many through Google

I thinking, It's process that growing skills

I think i should do this, but my hand did not move (So Sad...)


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<!--상위 버튼-->
<!--Top Button-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3"
android:paddingTop="3dp">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_style"
android:text="스탑워치"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_style"
android:text="기록화면" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_style"
android:text="설정"/>

</LinearLayout>

<!--스탑워치-->
<!--Stop Watch-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="460dp"
android:background="@drawable/center">

<TextView
android:id="@+id/time_Id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:clickable="true"
android:textSize="50dp"
android:textColor="@android:color/black"
android:text="00:00:00:00"/>

</RelativeLayout>

<!--하단 버튼-->
<!--Botton Button-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_style"
android:text="기록하기"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/button_style"
android:text="대기화면 전환"/>

</LinearLayout>

</LinearLayout>

메인 엑티비티는 위와 같이 했으며 특별한 것은 없다.

Main Acrivity is above image, nothing special


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

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

time_Id.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (cur_Status) {
case init:
baseTime = SystemClock.elapsedRealtime();
myTime.sendEmptyMessage(101);
cur_Status = run;
break;
case run:
myTime.removeMessages(101);
pauseTime = SystemClock.elapsedRealtime();
cur_Status = pause;
break;
case pause:
long now = SystemClock.elapsedRealtime();
myTime.sendEmptyMessage(101);
baseTime += (now - pauseTime);
cur_Status = run;
break;
}

}
});
}

스탑워치 부분이다.

Switch~Case문을 이용하여 클릭 시 마다 동작하는 것이 다르다.

원래는 If문을 이용하여 3가지의 상태에 따라 위와 같은 동작을 하게 하려고 했지만, 

Switch~Case문이 더 심플하고 가독성이 좋아서 If문을 사용하지 않았다.

각 Case가 실행이 되면 마지막에 상태값을 변경하도록 한다.

SystemClock.elapsedRealtime();은 android.os.SystemClock.elapsedRealtime()을 이용하였다.

android.os.SystemClock.elapsedRealtime()은 시스템이 부팅된 이후 시간을 알려준다.

후에 sendEmptyMessage(101)을 보내준다 101은 내가 임의로 지은 ID 혹은 Code 이다.


This is StopWatch section

It;s different to using Switch~Case when each click

Originally tried to user the If statement to do this accoriding to the three status

But Switch~Case is mor simple and good legibility then If statement

"SystemClock.elapsedRealtime();"is used "android.os.SystemClock.elapsedRealtime()"

"android.os.SystemClock.elapsedRealtime()"is show the time that System is after booting

after send "sendEmptyMessage(101)", 101 is a random Id ro Code (my own)


Handler myTime = new Handler() {
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;*/

time_Id.setText(getTime());
myTime.sendEmptyMessage(101);
}
};

String getTime() {
// 애플리케이션이 실행되고나서 실제로 경과된 시간
// actual elapsed time
long now = SystemClock.elapsedRealtime();
long outTime = now - baseTime;
String easy_outTime = String.format("%02d:%02d:%02d:%02d", outTime/1000/360 ,outTime/1000/60, (outTime/1000)%60, (outTime%1000)/10);
return easy_outTime;
}

시간은 여기서 구해지고 TextView에 set이 된다.

Time can be seen from here and TextView.Set


앞으로 해야할 것과 개선사항

What to do and improvements

앞으로 해야할 것은 사실 너무 많다. 스탑워치 종료시점 저장과 대기화면 등등

대기화면의 경우 스탑워치가 실행되는 동안 대기화면으로 전환 시 시간은 계속 흐르되 터치가 작동하지 않는다.

대기화면에서 나오고 싶을 경우 해제버튼을 2초동안 누르고 있어야 잠금화면이 풀리게 할 것이다.

설정에서는 지금 생각해둔것은 배경화면 전환 정도밖에 없다.


앞으로 개선해야할 사항은 스탑워치가 실행되는 동안 60분이 넘으면 1시간으로 넘어가도록 설정해야한다.

그런데 모르겠다..ㅜㅜ


What's actually too much to do in the future, for example save the StopWatch end time and wating screen etc.

In case of wating screen, wating while the StopWatch is running continue, but the touch does not work

If you want to leave the screen, press the release for 2seconds to release the screen.

The only thing i've been thinking about in the setup is background change.


What needs to be improved in the future should be set to go over to an hour if the stopWatch is more than 60 minutes

But...i don's know...(So sad...)


반응형
복사했습니다!