본문 바로가기

안드로이드

(15)
[Kotlin] 다른 Activity의 변수, 함수 사용하기 현재 MainActivity 와 SongActivity 에서 MediaPlayer 를 활용해서 음악을 재생하는 데 까지 성공했다. 다른 시중(?) 에 있는 음악 어플들은 Service 를 이용해서 백그라운드에서 음악을 재생한다. 하지만 난 그냥 Activity 에서 MediaPlayer 의 변수를 선언해서 음악을 재생했다. 처음에는 Main과 Song에서 각각 MediaPlayer 변수를 선언 해 주고 싱크를 최대한 맞춰주려고 했다. 그런데 노래를 재생시킨 채로 Main 과 Song 사이를 서로 이동하면 아무리 싱크를 ms 단위까지 맞추려고 해도 끊기는 현상이 발생했다. 그래서 난 Main에서만 MediaPlayer 변수를 선언하고, 그 변수를 Song 에서 끌어오는 방식을 택했다. 키워드는 "다른 Ac..
[Kotlin] Intent 에 JSON string 담아서 전송 (Feat. Gson) 이 글 에서 액티비티 사이에서 Intent 로 데이터를 주고 받았다. intent 관련 코드를 보자. intent.putExtra("title", song.title) intent.putExtra("singer", song.singer) intent.putExtra("isPlaying", song.isPlaying) 보내야 할 song 객체의 정보가 3가지이다. 그런데 웬걸, 코딩을 하다보니 song 객체에 넣어야 할 값이 점점 많아졌다. //song.kt data class Song( var title : String = "", var singer : String = "", var totalTime : Int = 0, var currentTime : Int = 0, var isPlaying : Bool..
[Kotlin] Seekbar 간단설명 위에서 보는것과 같이 슬라이더 형태의 게이지 바를 SeekBar 라고 한다. 볼륨조절, 동영상 재생에 대표적으로 사용된다. 현재 위치를 progress 값으로 가져와서 활용할 수 있다. max 속성으로 SeekBar의 최대값을 설정해 준다. progress 속성으로 SeekBar의 현재 위치를 알 수 있다. thumb 속성은 커서의 이미지와 관련이 있는데 자세한 사항은 구글링 하여라,,!! 노래 플레이 시에 시간초의 증가와 SeekBar 진행은 이전 글의 하단 코드에서 보는것과 같이, Player 라는 워커스레드를 만든 뒤에 Handler 를 통해 메인스레드에서 UI 작업을 진행하였다. 그렇다면 위의 영상처럼 터치를 한 상태로 좌우로 슥슥 스크롤을 했을때 변화는 어떻게 줄 수 있을까?? 아래에 나올 se..
[Kotlin] Worker Thread(작업 스레드) & Handler를 활용한 UI 처리 Thread(스레드) 란 프로세스 내에서 "순차적으로 실행되는 실행 흐름" 의 최소 단위를 말한다. 그 중에서 하나의 프로그램에서 main() 함수로부터 최초로 시작되는 실행 흐름을 Main Thread(메인 스레드) 라고 부른다. 초기에는 이 Main Thread(메인 스레드) 로 부터 다른 스레드들이 필요에 따라 만들어 지고 실행된다. 그리고 이렇게 만들어 진 스레드들 또한 다른 스레드들을 만들고 실행할 수 있다. 추가적으로 생성된 스레드 들을 Worker Thread(작업 스레드) 라고 부른다. Main Thread UI 작업이 이루어지는 스레드이다. 앱은 일반적으로 프로세스 하나 위에 여러 멀티 스레드가 돌고 있는 형태이지만, UI 작업을 멀티 스레드로 해 버리면 동기화 문제가 발생한다. 따라서 ..
[Android] 4주차 워크북 - Thread [Thread (4주차 주제)] 핵심 키워드 🎯 Thread 정의 : Process 내에서 "순차적으로 실행되는 실행 흐름" 종류 Main UI Thread : UI 작업이 행해지는 스레드. 사용자 입력 이벤트를 처리하기 위한 루퍼(Looper) 에서 큐(Queue) 방식으로 이벤트를 발생 순서대로 전달받아 처리. UI Thread : 시간이 오래 걸리는 작업을 행하는 스레드. 직접적인 UI 수정은 안되고, Handler, runOnUiThread 등을 통해 UI에 접근한다. MessageQueue Message 객체나 runnable 객체를 큐(Queue) 형태로 관리하는 자료구조.메시지 전달은 Handler 를 통해서, 그리고 큐로부터 메시지를 꺼내고 처리하는 역할은 Looper 가 수행한다. 앱의 ..
[Kotlin] registerForActivityResult() 사용법 (Feat. startActivityForResult 의 deprecated) https://sukzoon1234.tistory.com/34 [Kotlin] Activity 전환 & 데이터 전달 (Intent, putExtra...) 우선 시작하기 전 안드로이드의 4대 구성요소에 대해 알아보자. - 1. Activity 사용자에게 보여주는 UI 화면을 구성하는 컴포넌트이다. (웹의 HTML 같은 느낌) Activity 클래스를 상속받아 사용한다. 하 sukzoon1234.tistory.com 이 글에서 Activity 끼리 데이터를 주고받는 intent의 간단한 예제를 만들어 봤었다. 지금 하고있는 FLO 클론코딩에서도 Activity 끼리 왔다갔다(?) 하면서 쌍방향으로 데이터를 주고 받아야 하는 경우가 생겼다. 그런데 단순하게 StartActivity(intent) 로 계속해서..
[Kotlin] ViewPager2 & TabLayout (Feat. FragmentStateAdatper, TabLayoutMediator) 음.. 위의 화면에서 Banner부분의 이미지는 Swipe 방식으로 좌우로 움직이면서 이미지가 바뀐다. 저런건 어떻게 구현하지,,? AndroidX에서 제공 해 주는 ViewPager2 라는 아주 유용한 위젯이 있다. https://developer.android.com/guide/navigation/navigation-swipe-view-2?hl=ko ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기 | Android 개발자 | Android Developers ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기 스와이프 뷰를 사용하면 손가락의 가로 동작이나 스와이프로 탭과 같은 동위 화면 간을 탐색할 수 있습니다. 이러한 탐색 패턴을 가로 페이징이 developer.android.com ..
CoordinatorLayout 적용 (Feat. Scroll 상단 고정) FLO 어플 클론코딩을 진행하면서 위와 같은 화면을 구성해야 하는 상황에 닥쳤다. 화면 구성을 위와같은 식으로 잡았다. 우선 AlbumFragment.kt 의 아래쪽에 삽입되는 3개의 Fragment를 제쳐두고, 위쪽을 보니 [수록곡 , 상세정보 , 영상] 부분은 Scroll이 되면서 화면 상단에 도착했을 때 고정이 되고 아래쪽 Fragment의 ScrollView가 작동하는 식이다. 'ScrollView 상단고정' 뭐 이런 느낌으로 구글링을 해 본 결과 StickyScrolView 라는 키워드를 알게 되었다. 그래서 https://github.com/amarjain07/StickyScrollView GitHub - amarjain07/StickyScrollView: Sticky header and fo..