목록Android (30)
코딩하기 좋은날
없앨 수 있을까? 대부분의 서비스들은 각자의 Splash화면을 기존에 구현한 상태기 때문에, 해당 화면이 뜨는 것을 원치 않을 수 있다. 공식문서에서 해당 화면을 사용하지 않는 옵션은 제공되지 않고 있다. Android12의 소스코드를 분석해보며 해당 SplashScreen을 제거 할 수 있는지 확인해보자. 해당 화면이 언제 어디에 붙고 어떻게 제거 되는지 실제 소스코드를 분석해볼 것이다. 위의 SequenceDiagram은 Activity호출 프로세스를 보여주고 있다. ActivityManagerService(AMS)에 의해 시작되며 Task에서 ActivityRecord의 showStartingWindow()의 호출로 startingWindow를 보여주기 시작한다. – StartingWindow(Pr..
참조: Splash screens | Android Developers , Migrate your existing splash screen implementation to Android 12 and higher | Android Developers SplashScreen Android12이상을 사용하는 디바이스는 앱 실행시(Cold Start 또는 Warm Start 인 경우) 새로 추가된 SplashScreen이 반드시 나오도록 변경 되었다. 이를 따로 구현하지 않는다면, Android12 이상을 사용하는 디바이스에서는 default 화면(중앙에 앱 아이콘 및 App theme의 WindowBackground에 지정된 컬러를 배경색으로한)이 나타나게 된다. 이 화면은 앱의 첫 프레임이 그려질 때 사라지..
로그인에 이어 리더보드와 업적을 연동하는 방법을 알아보겠습니다. 앱 gradle에 아래의 코드를 추가해주면 사용이 가능합니다. implementation 'com.google.android.gms:play-services-games:21.0.0' 먼저 리더보드와 업적은 구글 플레이게임 콘솔에서 추가를 할 수 있습니다. 아래의 메뉴로 들어가셔서 필요한 업적과 리더보드를 생성 해 주시면 됩니다. 각각의 업적과 리더보드는 고유의 키를 가지게 되는데요. 상단의 리소스 보기를 클릭 하시면 프로젝트 내에 붙여넣을 수 있는 xml이 나오게 됩니다. 복사후 프로젝트에 붙여넣어 주시면 됩니다. 아래는 전체 업적과 리더보드를 확인 할 수 있는 코드 입니다. private fun showLeaderboard() { val ..
게임용 앱을 만들때 업적관리, 로그인, 리더보드 등의 기능을 쉽게 이용하기 위해서 Google Play Game을 연동하여 사용 할 수 있습니다. 따로 위의 기능들을 직접 구현할 필요가 없기 때문에 + 유저들이 친숙하기 때문에 편하게 사용 할 수 있는데요. 보통 게임을 만들땐.. Unity를 많이 사용하셔서 Unity에서 연동하는 방법은 많이 있는데.. 네이티브로 연동하는 것에 대해서는 정보가 많이 없고 문서도 조금(?) 불친절 하더라구요. 특히 firebase와 함께 연동하는 부분에서 삽질을 조금 하였는데.. 기록용 + 다른분들이 삽질을 조금 줄였으면 하는 마음에 연동하는 방법에 대한 글을 써보려고 합니다. 우선 네이티브 앱에서 Google Play Game을 연동하기 위해서는 아래와 같은 과정을 거쳐..
안드로이드에서 애니메이션을 구현하는 방법은 여러가지가 있습니다. ObjectAnimator, ViewPropertyAnimator, ValueAnimator, OpenGL 등등을 이용 할 수 있는데 개인적으로 저는 ValueAnimator를 자주 사용합니다. ValueAnimator만 사용하더라도 ObjectAnimator나 ViewProperyAnimator로 할 수 있는 동작을 동일하게 할 수 있고, ValueAnimator는 다양한 뷰에 대해서 동시에 처리가 가능하기 때문에 자주 사용하는데요. 예시로 들 애니메이션은 아래의 영상에 나오는 카운트 다운입니다. 화면 상단에서 애니메이션이 진행됨에 따라 화면의 중앙까지 숫자가 내려오며 알파값이 점점 증가하는 애니메이션 입니다. 아래는 구현 코드입니다. V..
안드로이드에서 화면 이동시에 Transition을 사용하는 경우가 있는데요. API 29, 30레벨에서 Exit Transition이 동작하지 않는 버그가 있습니다. 예를 들어 A,B,C 3개의 액티비티가 있는 경우 A -> B -> C 로 진입시 EnterTransition 모두 정상 동작 C -> B Exit Transition 정상 동작 B -> A Exit Transition 동작 X (???) 이런 현상이 있습니다. 또한 이현상은 API 29,30 레벨에서만 발생하고 있는데요. 원인 파악을 조금 해보았습니다. 우선 해당 현상과 관련 있는 클래스들 입니다. Activity.java EnterTransitionCoordinator.java ExitTransitionCoordinator.java Ac..
RecyclerView 이글을 읽으시는 분들은 아마도, RecyclerView를 사용해 본적이 있으신 분들일 것입니다. RecyclerView는 다수의 아이템들을 정의한 ViewHolder에 맞게 추가하고, 현재 스크린에 보여지는 아이템들만 생성하여 보여주며, 스크롤 하여 아이템들이 변경될 때 미리 생성된 ViewHolder들을 Recycle하여(ViewCache, RecycledPool 을 활용하여) 효율적으로 사용할 수 있는 컨테이너라고 할 수 있습니다. 기본적으로 RecyclerView를 사용하기 위해서는 Adapter, LayoutManager, ViewHolder가 필요한데 이중에서 Adapter는 데이터 리스트를 실제 눈으로 볼 수 있게 item으로 변환하는 중간다리 역할을 합니다. Recyc..
오랜만에 글을 쓰게 되었습니다!! 안드로이드에서 경과 시간을 체크하기 위해서 시간을 측정할 필요가 있었습니다. 또는 주기적인 작업에도 사용 할 수 있는데요. 저의 경우 일종의 스톱워치 기능을 구현하려고 했습니다. Timer에서 초기 딜레이 값과, periode를 설정해주면 해당 주기마다 내부 동작이 실행 되는데, 코틀린의 경우 아래의 함수를 이용해서 타이머를 동작 시킬 수 있습니다. 저도 처음에는 timer(...)를 이용해서 시간을 측정하고 화면에 표시를 하였었는데 실제 스톱워치와 시간측정을 비교해보니 시간이 지날수록 오차가 발생하였습니다!!!(1분정도 측정하였을때 무려 5초나 오차가 났기 때문에 무시하기에는 큰 수치였습니다) @kotlin.internal.InlineOnly public inline ..