728x90
  • 숫자형

# 사칙연산
>>> a=3
>>> b=4
>>> a+b
7
>>> a*b
12
>>> a/b
0.75	# 소수점 제한 없음
# 제곱
>>> a**b
81		
# 나머지
>>> a%b
3		
# 정수로 출력
>>> a//b
0		
  • 문자열

# ' '로 출력
>>> "Hello world"
'Hello world'
>>> 'hello world'
'hello world'
>>> """Hello world"""
'Hello world'
>>> '''hello world'''
'hello world'
# " "로 출력
>>> string = '"Hello"'
>>> print(string)
"Hello"
>>> string = "\"Hello\""
>>> print(string)
"Hello"
# 줄바꿈 사용
>>> string = "Hello\nWorld"
>>> print(string)
Hello
World
# 문자열 더하기
>>> string1 = "Hello"
>>> string2 = "World"
>>> string1+string2
'HelloWorld'
# 문자열 곱하기
>>> string = "Hello"
>>> string*2
'HelloHello'
  • 문자열 인덱싱

# 문자열 인덱싱
>>> string = "Hello world"
>>> string[0]
'H'
>>> string[10]
'd'
>>> string[-1]
'd'
# 문자열 슬라이싱
>>> string[0:4]
'Hell'
>>> string[:4]
'Hell'
>>> string[4:]
'o world'
  • 문자열 포매팅

>>> "I eat %d apples." %3
'I eat 3 apples.'
>>> number = 10
>>> day = 'three'
>>> "I ate %d apples. so I was sick for %s days." %(number, day)
'I ate 10 apples. so I was sick for three days.'
  • 정렬과 공백

# 오른쪽 정렬
>>> "%10s" % "hi"
'        hi'
# 왼쪽 정렬
>>> '%-10s' % 'hi'
'hi        '
>>> '%-10sjane.' % 'hi'
'hi        jane.'
  • 소수점

# 정수부분 자릿 수와 소수부분 자릿수
>>> "%0.4f" % 3.4231323
'3.4231'
>>> "%10.4f" % 3.4231323
'    3.4231'
  • 문자열 개수 세기(count)

>>> string = "abbbaaaabb"
>>> string.count('b')
5
  • 문자 위치 알려주기(find)

# find 사용
>>> string = "Hello world"
>>> string.find('o')
4
# 찾으려는게 없으면 -1 반환
>>> string.find('k')
-1
# index 사용
>>> string.index('o')
4
# 찾으려는게 없으면 오류
>>> string.index('k')
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    string.index('k')
ValueError: substring not found
  • 문자열 처리

# 문자열 삽입
>>> char=','
>>> string='abcd'
>>> char.join(string)
'a,b,c,d'
# 소문자를 대문자로 바꾸기
>>> string = string.upper()
>>> string
'ABCD'
# 대문자를 소문자로 바꾸기
>>> string = string.lower()
>>> string
'abcd'
# 공백 제거
>>> char=' '
>>> char.join(string)
'a b c d'
>>> string.strip()
'abcd'
# 문자열 바꾸기
>>> string = 'hello world'
>>> string.replace('world','python')
'hello python'
# 문자열 나누기
>>> string.split()
['hello', 'world']
>>> string = 'a.b.c.d'
>>> string.split('.')
['a', 'b', 'c', 'd']
  • 리스트

>>> arr = [1,2,3]
>>> arr1 = [ ]
>>> arr2 = ['a','b','c']
>>> arr3 = ['a','b',1,2]
>>> arr4 = [1,2,['a','b']]
>>> arr4
[1, 2, ['a', 'b']]
>>> arr4[2]
['a', 'b']
>>> arr4[2][1]
'b'
>>> arr[0]
1
>>> arr[1] + arr[2]
5
>>> arr[-1]
3
>>> arr[0:2]
[1, 2]
# 리스트 더하기
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b
[1, 2, 3, 4, 5, 6]
# 리스트 반복하기
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
  • 리스트 수정

# 수정하기
>>> a=[1,2,3]
>>> a[2] = 4
>>> a
[1, 2, 4]
# 끼워넣기
>>> a[1:2]
[2]
>>> a[1:2] = ['a','b','c']
>>> a
[1, 'a', 'b', 'c', 4]
# 삭제하기
>>> a[1:3] = []
>>> a
[1, 'c', 4]
>>> del a[1]
>>> a
[1, 4]
# 추가하기(맨 끝에)
>>> a.append(6)
>>> a
[1, 4, 6]
# 삽입하기(원하는 위치에)
>>> a = [1,2,3]
>>> a.insert(0,4)
>>> a
[4, 1, 2, 3]
# 제거하기(앞에서부터 원하는 요소)
a = [1,2,1,1,2,3,4]
>>> a.remove(1)
>>> a
[2, 1, 1, 2, 3, 4]
  • 리스트 정렬하기

# 정렬하기
>>> a = [1,3,4,2]
>>> a.sort()
>>> a
[1, 2, 3, 4]
# 뒤집기
>>> a.reverse()
>>> a
[4, 3, 2, 1]
# 위치 반환
>>> a.index(2)
2
>>> a.index(5)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    a.index(5)
ValueError: 5 is not in list
  • 리스트 꺼내기

>>> a = [1,2,3]
>>> a.pop()
3
>>> a.pop()
2
>>> a
[1]
  • 리스트 요소 개수 세기

>>> a = [1,2,3,1]
>>> a.count(1)
2
  • 리스트 확장하기

>>> a = [1,2,3]
>>> a.extend([4,5])
>>> a
[1, 2, 3, 4, 5]
>>> a.extend([[4,5]])
>>> a
[1, 2, 3, 4, 5, [4, 5]]
728x90
728x90

https://www.python.org/ 에 접속합니다.

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

Downloads를 클릭한 후 Downlad Python 3.8.1을 클릭합니다

설치 파일에서 아래 두 체크박스를 체크 후 설치를 시작하면 됩니다.

설치가 완료되었다면 python 3.8.1 shell을 실행합니다.

글꼴을 변경하기 위해선 Options > Configure IDLE를 클릭해줍니다.

shell 환경에서 윗 방향키를 누르면 이전 명령어를 불러오기 위해서는 설정을 해줘야 합니다.

Configure IDLE > Keys에서 history-previous키를 누른 후 Get New Keys for Selection을 클릭해 줍니다.

오른쪽 선택 창에서 Up Arrow를 클릭 후 OK를 눌러줍니다. 다른 키를 원하거나 추가 키를 원하면 Ctrl이나 Alt, Shitf를 체크하여 OK를 눌러줍니다.

Custom Key의 이름을 붙여줍니다.

설정한 키로 변경된 것을 볼 수 있습니다.

처음 화면은 shell 환경이고 에디터로 활용하기 위해서는 File > New File로 파일을 생성하여 작성해주면 됩니다.

간단히 작성 후 실행하기 위해선 F5를 누르면 shell 창에서 실행 결과가 나오게 됩니다.

728x90
728x90

1. 수업 소개 : https://opentutorials.org/course/3084

 

WEB1 - HTML & Internet - 생활코딩

--- 우리는 지금부터 코딩 웹 인터넷 컴퓨터라는 거대한 주제에 대한 탐험을 시작할 거예요. 이 여행을 시작하기에 앞서서 한가지 준비가 필요한데요. 바로 우리들의 상상력입니다. 지금부터 여러분은 자신을 남의 문제를 통해서 코딩을 배우려는 학생이 아니라 나의 문제를 코딩으로 해결하려는 엔지니어라고 상상해주세요. 그럼 어떤 문제를 해결하면 좋을까요? 글쎄요. 각자가 해결하고 싶은 문제가 다를 거예요. 또 해결하고 싶은 문제가 아직 없을지도 모르고요. 그래서

opentutorials.org

본 수업은 코딩, 웹, 인터넷, 컴퓨터라는 주제로 수업을 시작합니다.

 

준비물은 상상력. 학생이 아닌 문제를 코딩으로 해결하려는 엔지니어라고 상상해야 합니다.

2. 프로젝트의 동기 : https://opentutorials.org/course/3084/18438

 

프로젝트의 동기 - 생활코딩

--- 지금부터 생활코딩을 시작하기 전인 2010년으로 돌아가서 저의 이야기를 들려드릴게요. 저는 컴퓨터 프로그래머로 일하고 있었고, 프로그래머가 아닌 동료들과 함께 일할 기회가 많았습니다. 동료들의 요청 중에는 약간의 지식이 있으면 개발자를 통하지 않고도 스스로 해결할 수 있는 일이 많았습니다. 난해해 보이는 개념들 때문에 소통에 어려움을 겪는 동료도 많았습니다. 어느 날 문득 직장동료들에게 SQL이라는 컴퓨터 언어를 알려주고 싶다는 생각이 들었습니다.

opentutorials.org

강사분의 과거 얘기를 통해 왜 이런 프로젝트를 시작하게 됐는지 설명해줍니다.

3. 기획 : https://opentutorials.org/course/3084/18437

 

기획 - 생활코딩

--- 지금부터  제가 끄적거리기 시작한 노트를  같이 한번 들여다보시죠.  무엇인가를 만들기 전에 무엇을 만들 것인가를  미리 상상하고,  계획해보는 과정이 필요합니다.  이런 과정을 기획이라고 해요. 이것을 전문적으로 하는 분들을 기획자라고 합니다.  지금부터 우리는 기획자입니다.  코딩수업과 내용을 잘 정리 정돈할 수 있는 웹사이트를 그려보겠습니다.  1. 제일 위쪽에는 수업의 전체 제목을 적어봤습니다.  2. 왼쪽에는 수업의 목차를 적었습니다. 목

opentutorials.org

"만들기 전에는 상상하고 계획하고 구체화하는 과정이 필요합니다"

4. 코딩과 HTML : https://opentutorials.org/course/3084/18445

 

코딩과 HTML - 생활코딩

--- 기획을 끝냈으니까 이제 구현을 할 차례입니다. 구현하기에 앞서서 타임머신을 타고 미래로 날아가서 우리가 어떤 일을 하게 될지 보고 옵시다. 화면이 두 개로 쪼개져 있습니다. 집중해서 봐야 할 부분은 어떤 쪽이 사람이 하는 일이고, 어떤 쪽이 기계가 하는 일인가를 분리해서 생각해보는 것입니다. 또 어떤 것이 원인이고, 어떤 것이 결과인지를 추론해보는 것입니다. 이것은 이해하는 것은 우리 수업 전체를 통틀어서 가장 중요한 부분입니다. 어떤가요? 구분이

opentutorials.org

어느 쪽이 사람이 하는 일이고 어느 쪽이 기계가 하는 일인지 분리해서 생각해봐야 합니다. 어떤 것이 원인이고 결과인지 추론해 보는 것을 이해하는 것이 가장 중요한 부분입니다.

 

사람이 하는 일, 원인을 부르는 여러 가지 표현 = Code, Source, Language

기계가 하는 일, 결과를 부르는 여러가지 표현 = Application, App, Program...

 

원인을 통해 결과를 만드는 것이 코딩을 이해하는 핵심입니다.

 

HTML(HyperText Markup Language)의 좋은 점

  1. 쉽다

  2. 중요하다

Public Domain : 어떠한 저작권도 존재하지 않는 완전한 자유. 

5. HTML 코딩 실습 환경 준비 : https://opentutorials.org/course/3084/18448

 

HTML 코딩 실습 환경 준비 - 생활코딩

--- 기획이 끝났으니  이제는 코딩하기 위한  준비를 해보겠습니다.  코딩을 하기 위해서는 에디터(Editor)라는 프로그램이 필요합니다. 각자의 운영체제에는 이미 에디터가 준비 되어 있습니다. 윈도 - 메모장 맥 - 텍스트 편집기 리눅스 - gedit, nano, vim 에디터마다 사용법이 다르기 때문에 통일하겠습니다. 이 수업에서 채택한 에디터는 github.com에서 만든 Atom(아톰)입니다. 미래에는 Atom이 없어졌을 수도 있고, 더 좋은 에

opentutorials.org

준비물

  1. 웹 브라우저

  2. 코드를 작성하는 프로그램(Editor)

수업에서 사용하려는 Editor는 Atom입니다.

 

다른 에디터를 검색하고 싶을 땐 HTML Editor, 혹은 best HTML Editor 2020(year)을 검색하면 됩니다.

 

Atom을 다운로드하기 위해서 https://atom.io 에 접속합니다.

 

A hackable text editor for the 21st Century

At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config file. We can’t wait to see what you build with it.

atom.io

Atom.io
Atom 실행 화면

Atom - 아톰 URI 핸들러 프로토콜 설정 / "Register as default atom:// URI handler" - https://gocoder.tistory.com/1328

 

Atom - 아톰 URI 핸들러 프로토콜 설정 / "Register as default atom:// URI handler"

atom 프로토콜 설정 안녕하세요. 고코더 입니다. ● 1. 아톰을 실행하면 이런 메세지가 나타나서 예스를 해야 할지 NO을 해야 할지 고민이 되신가요? Atom is not currently set as the default handler for atom:..

gocoder.tistory.com

먼저 Web이라는 Directory를 생성합니다. 그다음에 File > Open Folder을 클릭 후 만든 Directory를 선택합니다.

Web 추가

다음으로 Web에서 우클릭을 하여 새 파일을 만들어 줍니다.

1.html 생성

그 후 chrome에서 Ctrl + O를 누르면 열기가 생성되는데 여기서 만들어준 1.html을 선택합니다. 지금은 아무것도 없는 빈 화면입니다.

1.html 열기

이제 Editor에서 hello web이라고 입력 후 Ctrl + S로 저장해줍니다.

1.html에서 새로고침을 눌러주면 hello web이 추가된 것을 볼 수 있습니다.

728x90
728x90

공부트랙

링크

 

야학

 

yah.ac

 

codingeverybody/codingyahac

Contribute to codingeverybody/codingyahac development by creating an account on GitHub.

github.com

  • 질문 작성 방법
 

https://coding.yah.ac/live.html

 

coding.yah.ac

 

 

 

 

728x90
728x90

MainActivity의 버튼을 클릭하면 TimePickerDialog가 나오고 설정한 시간으로 알람을 설정하도록 해보겠습니다.

그 전에 TimePickerDialog 사용하는 방법입니다.

https://1d1cblog.tistory.com/40

 

안드로이드 스튜디오 TimePickerDialog 사용하기

TimerPickerDialog를 자바 코드에서 사용하는 방법입니다. public class MainActivity extends AppCompatActivity { ImageButton alarmButton; int alarmHour=0, alarmMinute=0; @Override protected void onCreat..

1d1cblog.tistory.com

 

먼저 activity_main.xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <Button
        android:id="@+id/alarmButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="165dp"
        android:layout_marginLeft="165dp"
        android:layout_marginTop="344dp"
        android:text="알람설정" />
</RelativeLayout>

간단하게 화면의 한 가운데 버튼을 만들어줬습니다.

 

다음으로 MainActivity.java 파일입니다.

public class MainActivity extends AppCompatActivity {
    Button alarmButton;
    int alarmHour, alarmMinute;
    Calendar alarmCalendar;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        alarmButton = (Button) findViewById(R.id.alarmButton);

        alarmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimePickerDialog timePickerDialog 
                = new TimePickerDialog(getApplicationContext()
                , new TimePickerDialog.OnTimeSetListener() {
                    @RequiresApi(api = Build.VERSION_CODES.M)
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        alarmHour = hourOfDay;
                        alarmMinute = minute;
                        setAlarm();
                    }
                },alarmHour, alarmMinute, false);
            }
        });
    }

    void setAlarm() {
        alarmCalendar = Calendar.getInstance();
        alarmCalendar.setTimeInMillis(System.currentTimeMillis());
        alarmCalendar.set(Calendar.HOUR_OF_DAY, alarmHour);
        alarmCalendar.set(Calendar.MINUTE, alarmMinute);
        alarmCalendar.set(Calendar.SECOND, 0);
        // TimePickerDialog 에서 설정한 시간을 알람 시간으로 설정

        if (alarmCalendar.before(Calendar.getInstance())) alarmCalendar.add(Calendar.DATE, 1);  
        // 알람 시간이 현재시간보다 빠를 때 하루 뒤로 맞춤
        Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmIntent.setAction(AlarmReceiver.ACTION_RESTART_SERVICE);
        PendingIntent alarmCallPendingIntent 
        	= PendingIntent.getBroadcast
            (MainActivity.this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            alarmManager.setExactAndAllowWhileIdle
            (AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), alarmCallPendingIntent);
        else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            alarmManager.setExact
            (AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), alarmCallPendingIntent);
    } // 알람 설정
}

SDK의 버전이 마쉬멜로(23) 이상이면 setExactAndAllowWhileIdle 함수를 사용해야 Doze 모드에서 제대로 실행될 수 있습니다.

 

https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko#restrictions

 

잠자기 및 앱 대기 모드에 맞게 최적화하기  |  Android 개발자  |  Android Developers

앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다.

developer.android.com

 

이제 알람 서비스를 수신할 AlarmReceiver.java 파일과 서비스를 해 줄 AlarmService.java 파일입니다. AlarmReceiver.java, AlarmService.java를 사용하기 위해서는 AndroidManifest.xml 파일에 아래 코드를 추가해줘야 합니다.

<service
    android:name=".AlarmService"
    android:enabled="true"
    android:exported="true" />
<receiver android:name=".AlarmReceiver" />

AlarmReceiver.java 파일입니다.

public class AlarmReceiver extends BroadcastReceiver {
    public static final String ACTION_RESTART_SERVICE = "Restart";
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(ACTION_RESTART_SERVICE)) {
            Intent in = new Intent(context, AlarmService.class);
            context.startService(in);
        }
    }
}

AlarmService.java 파일입니다.

public class AlarmService extends Service {
    String TAG = "TAG+Service";
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "AlarmService");
        Intent alarmIntent = new Intent(getApplicationContext(), AlarmActivity.class);
        startActivity(alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
        return super.onStartCommand(intent, flags, startId);
    }
}

마지막으로 설정한 알람시간이 되었을때 실행할 AlarmActivity.java입니다.

public class AlarmActivity extends AppCompatActivity {
    Calendar calendar;
    SwipeButton swipeButton;
    TextView timeText;
    MediaPlayer mediaPlayer;
    boolean flag = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);
        calendar = Calendar.getInstance();
        swipeButton = (SwipeButton) findViewById(R.id.swipe_btn);
        timeText = (TextView) findViewById(R.id.time);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        // 잠금 화면 위로 activity 띄워줌

        mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.beep);   // 소리를 재생할 MediaPlayer
        mediaPlayer.setLooping(true);   // 무한반복
        mediaPlayer.start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (flag == true) {
                    try {
                        calendar = Calendar.getInstance();
                        if (calendar.get(Calendar.HOUR_OF_DAY) > 0 && calendar.get(Calendar.HOUR_OF_DAY) < 12) {
                            timeText.setText("AM " + calendar.get(Calendar.HOUR_OF_DAY) + "시 " + calendar.get(Calendar.MINUTE) + "분 " + calendar.get(Calendar.SECOND) + "초");
                        } else if (calendar.get(Calendar.HOUR_OF_DAY) == 12) {
                            timeText.setText("PM " + calendar.get(Calendar.HOUR_OF_DAY) + "시 " + calendar.get(Calendar.MINUTE) + "분 " + calendar.get(Calendar.SECOND) + "초");
                        } else if (calendar.get(Calendar.HOUR_OF_DAY) > 12 && calendar.get(Calendar.HOUR_OF_DAY) < 24) {
                            timeText.setText("PM " + (calendar.get(Calendar.HOUR_OF_DAY) - 12) + "시 " + calendar.get(Calendar.MINUTE) + "분 " + calendar.get(Calendar.SECOND) + "초");
                        } else if (calendar.get(Calendar.HOUR_OF_DAY) == 0) {
                            timeText.setText("AM 0시 " + calendar.get(Calendar.MINUTE) + "분 " + calendar.get(Calendar.SECOND) + "초");
                        }
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {}
                }
            }
        }).start(); // 실시간으로 시계 출력

        swipeButton.setOnStateChangeListener(new OnStateChangeListener() {
            @Override
            public void onStateChange(boolean active) {
                mediaPlayer.stop();
                flag=false;
                finish();
            }
        }); // Swipe Button 밀어서 해제
    }
}

알람이 실행되면 지정한 노래가 실행되게 하였습니다. 실시간으로 화면 상단에 시계를 출력하며 하단에는 Swipe Button을 넣어 밀어서 해제하면 알람이 꺼지도록 만들었습니다.

 

15~18열의 getWindow()는 화면이 잠겨있거나 꺼져있어도 알람이 실행되면서 화면을 띄울 수 있게 해줍니다.

https://1d1cblog.tistory.com/43

 

안드로이드 스튜디오 Swipe Button 사용하기

먼저 build.gradle 파일을 아래와 같이 수정합니다. minSdkVersion을 16으로 수정하고 dependencies에 아래처럼 코드를 추가해줍니다. apply plugin: 'com.android.application' android { compileSdkVersion 28 d..

1d1cblog.tistory.com

https://1d1cblog.tistory.com/44

 

안드로이드 스튜디오 MediaPlayer 사용하기

먼저 res폴더에 우클릭을 하여 Android Resource Directory를 생성해줍니다. 이름과 type을 raw로 설정해줍니다. raw 폴더 안에 원하는 음악 파일을 넣어준 다음 Java 코드를 작성해줍니다. setLooping 값을 tru..

1d1cblog.tistory.com

728x90
728x90
@Override
public void onBackPressed() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
} // 뒤로가기 버튼 클릭했을 때 홈으로 이동하기

여기서 onBackPressed() 함수가 뒤로가기 버튼을 클릭했을 때 호출되는 함수입니다.

728x90
728x90

먼저 res폴더에 우클릭을 하여 Android Resource Directory를 생성해줍니다.

이름과 type을 raw로 설정해줍니다.

raw 폴더 안에 원하는 음악 파일을 넣어준 다음 Java 코드를 작성해줍니다. setLooping 값을 true로 설정하면 음악파일을 무한 재생하게 됩니다.

public class AlarmActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);
        
        mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.beep);
        mediaPlayer.setLooping(true);
        mediaPlayer.start();
        
        swipeButton.setOnStateChangeListener(new OnStateChangeListener() {
            @Override
            public void onStateChange(boolean active) {
                mediaPlayer.stop();
                finish();
            }
        });
    }
}

 

728x90
728x90

먼저 build.gradle 파일을 아래와 같이 수정합니다. minSdkVersion을 16으로 수정하고 dependencies에 아래처럼 코드를 추가해줍니다.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        ...
        minSdkVersion 16
        ...
    }

}

dependencies {
    ...
    implementation 'com.ebanx:swipe-button:0.8.3'
}

코드 추가 후 우측 상단의 Sync Now를 클릭해 줍니다.

 

다음으로 원하는 xml 파일에 가서 아래처럼 코드를 작성해줍니다. Layout은 RelativeLayout이어야 합니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    ...>

    <com.ebanx.swipebtn.SwipeButton
        android:id="@+id/swipe_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="34dp"
        android:layout_marginLeft="34dp"
        android:layout_marginEnd="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginBottom="82dp"
        app:button_background="@drawable/shape_button"
        app:button_bottom_padding="20dp"
        app:button_image_disabled="@drawable/alarm"
        app:button_image_enabled="@drawable/applogo"
        app:button_image_height="60dp"
        app:button_image_width="100dp"
        app:button_left_padding="20dp"
        app:button_right_padding="20dp"
        app:button_top_padding="20dp"
        app:has_activate_state="true"
        app:initial_state="disabled"
        app:inner_text="알람 시간이 되었습니다!"
        app:inner_text_background="@drawable/shape_rounded"
        app:inner_text_bottom_padding="18dp"
        app:inner_text_color="@android:color/white"
        app:inner_text_left_padding="80dp"
        app:inner_text_size="16sp"
        app:inner_text_top_padding="18dp" />
</RelativeLayout>

마지막으로 Java코드에서 Listener 사용하는 방법입니다. Listener 종류는 두가지입니다.

package my.homekeeper;

import com.ebanx.swipebtn.OnStateChangeListener;
import com.ebanx.swipebtn.SwipeButton;

public class AlarmActivity extends AppCompatActivity {
    
    SwipeButton swipeButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);
        swipeButton = (SwipeButton) findViewById(R.id.swipe_btn);

        swipeButton.setOnStateChangeListener(new OnStateChangeListener() {
            @Override
            public void onStateChange(boolean active) {
                Toast.makeText(getApplicationContext(),"종료하였습니다.",Toast.LENGTH_LONG).show();
            }
        });
    }
}
	swipeButton.setOnActiveListener(new OnActiveListener() {
            @Override
            public void onActive() {
                Toast.makeText(getApplicationContext(),"종료하였습니다.",Toast.LENGTH_LONG).show();
            }
        });

자료출처 : https://github.com/ebanx/swipe-button/

728x90

+ Recent posts