
위와 같이 체중계에서 드래그를 틍호 체중을 선택하는 화면을 그려볼 것이다.먼저 시작해야할 부분은 체중계에 저 원의 모양이다.먼저 각 정보들을 담은 data class를 정의한다.코드를 보면 drawContext.canvas.nativeCanvas 쓰는 것을 볼 수 있다

\[Android] Canvas로 체중계 만들기 - 1 체중계 원 구현하기체중계의 모양을 만들었으니 이제 체중계에 따른 눈금을 설정할 차례다.위와 같이 체중계에 숫자와 눈금을 만들 예정이다.이미지를 보면 10단위, 5단위, 그리고 1단위마다 눈금의 색과 길이가 다른 것

https://velog.io/@vsvx13/Android-Canvas%EB%A1%9C-%EC%B2%B4%EC%A4%91%EA%B3%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-2-%EB%88%88%EA%B8%88-%EB%A7%8C%EB%93%A4%

네이티브 개발 키트(NDK)는 Android에서 C및 C++ 코드를 사용할 수 있게 해주는 일련의 도구 모음으로, 네이티브 액티비티를 관리하고 센서 및 터치 입력과 같은 실제 기기 구성요서에 액세스하는 데 사용할 수 있는 플랫폼 라이브러리를 제공한다.아래의 경우에 ND

카메라는 소셜 미디어와 공유할 동영상 및 이미지를 캡처하고 문서 및 QR 코드 스캔과 같은 유틸리티를 만드는 등 다양한 애플리케이션 사용 사례를 지원한다.Anroid 앱에 카메라 기능을 추가하려는 경우 크게 세 가지 옵션들이 있지만 이중 Camera는 더 이상 지원을

MockWebServer는 로컬에서 HTTP 서버를 시뮬레이션하여 클라이언트 코드의 네트워크 요청/응답을 제어하고 테스트할 수 있도록 도와주는 도구입니다.MockWebServer를 왜 사용할까?사실 테스트 자체를 거의 만들어본 적이 없는 나로써는 테스트 코드에 힘을 쏟

지금까지 개발을 하면서 BroadcastReceiver를 사용해본 적이 별로 없는 것 같다. 분명 4대 컴포넌트인데 이를 제대로 알지 못하는 것 같아 간단히 적용해보는 방법을 알아보려고 한다.사실 큰 작업은 아니고 브로드캐스트가 제대로 호출이 되는지 로그를 통해 알아보

페이징 처리를 구현할 때 사용되었던 방법 중 하나가 RemoteMediator가 있다. 이는 api를 받아온 정보를 Room에 저장해서 값을 가져오는 방식인데, 예전에 회사에서 이 방법을 썼다가 데이터 값이 바뀌면서 많은 오류가 발생한 적이 있다. 이 경우 마이그레이

요즘 게임은 잘 안하지만 예전에 던파를 좋아했던 사람으로 던파 관련 앱이 하나 있다.던파ON 이라는 앱인데, 해당 앱에서 아래와 같은 UI가 메인에 있는 것을 보고 나도 한 번 만들어볼까 생각해서 시작하게 되었다.첫 번째는 자동으로 스크롤이 되는 UI이다. 이 앱 뿐만

Room 퍼시스턴스 라이브러리는 안드로이드 아키텍처 컴포넌트에 포함되어 있으며, 안드로이드 아키텍처 가이드라인을 준수하면서 안드로이드 앱에 데이터베이스 저장소 지원을 쉽게 추가하기 위해 디자인되었다.전형적인 안드로이드 앱 권장 아키텍쳐Room 퍼시스턴스 라이브러리를 이

코드를 보면 remember를 이용한 상태를 가진 변수가 있다.이를 이용하여 간단한 평수와 제곱미터를 구하는 코드를 보자위 코드를 보면 텍스트가 변화할 때마다 제곱미터가 구해지는 값이다.이런 상태 변수가 가지고 있는 경우 Stateful한 컴포저블이다.State Hoi
@Stable은 Compose의 성능 최적화를 위한 힌트를 컴파일러에게 주는 어노테이션입니다.컴포저블이 사용하는 객체가 외부에서 자주 변경되지 않는 안정적인 구조임을 명시상태 객체(UiState, ViewState)가 자주 변경되지 않고, 내부의 값이 바뀔 때만 rec
One-Time Event(일회성 이벤트)란, 안드로이드 UI에서 단 한 번만 처리되어야 하는 이벤트를 말합니다.대표적인 예시로는 다음과 같은 것들이 있습니다:로그인 성공 시 네비게이션 이동토스트 메시지 출력다이얼로그 노출스낵바 표시이러한 이벤트들은 한 번만 처리되어야

음악 관련이나, 녹음 관련 앱을 만들 경우 아래와 같이 녹음 관련 Ui를 구현해야할 때까 있다.진행이 되면 점점 진해져서 진행되는 것을 보여주는 UI 위처럼 음성 녹음 기록한 것을 토대로 높이가 나오는 방법인데, 일단 기능을 제외하고 UI를 구현해보려고 한다.먼저 구현

안드로이드 앱 개발 중에 음성녹음을 이용해 자신의 하루를 기록하는 앱을 만드는 중이다.그래서 음성녹음에 관련된 기능들을 구현하면서 어떻게 구현했는지 기록하기 위해 작성했다.MediaRecorder는 안드로이드에서 오디오·비디오 녹음을 간단히 구현할 수 있는 고수준 AP

음성 녹음 앱을 구현하다가 음성 녹음 도중 앱을 백그라운드로 돌리게 되었을 경우 앱을 일시중단 하는 기능을 구현하려 한다.음성녹음을 하는 EchoScreen에서 해당 화면이 돌아오는지, 나가는지에 대한 여부를 확인하기 위해 produceState를 이용해 라이프사이크

면접에서 화면 회전 같이 구성 변경이 일어나면 생명주기가 어떻게 동작되는지 물어보았다.정말 간단한 질문이였던 것 같은데 이걸 제대로 답하지 못한걸 보면 기능 구현만 하고 아직 안드로이드에 대해 자세히 알지 못한다는 것이지.. 실제로 면접에서는 엉뚱한 답변을 내놓았다.내
ViewModel은 안드로이드 MVVM 아키텍처에서 중요한 구성 요소로 화면관련 데이터를 관리하고 생명주기에 안전하게 유지하느 역할을 한다.ViewModel을 사용하면 화면 회전 시에도 데이터가 초기화하는 문제를 해결할 수 있고, UI와 로직 분리, 불필요한 참조를 제

모든 텍스트는 음성으로 텍스트 인식했기 때문에 발음 때문에 단어가 조금 틀릴 수 있다.나의 모의 면접 결과피드백 내용확실히 흐름만 간단하게 알지만 동작원리나, 개념의 정의를 자세하게 알지 못하는 것 같다. 이 부분을 계속 보면서 기억해야할 것 같고, 특히 예시를 제대로

스프링 서버 공부하는 와중 인프런에서 채팅 기능을 구현하는 강의가 있었다.링크텍스트위 강의 영상인데 프론트는 Vue로 되어있지만, 이를 이용해 로컬 서버를 통한 안드로이드 채팅 화면을 구현해보려고 한다.실제 결과물은 아래와 같다.서로 다른 두 에뮬레이터에서 하나의 채팅

예전에 가끔 사용했던 방식이지만 요즘 앱에서는 많이 보이지 않는 왼쪽 또는 오른쪽으로 스와이프를 통해 상호작용하는 방법을 Compose UI로 구현해보려 한다.해당 코드는 아래 링크 유튜브 동영상을 보고 학습을 진행했습니다.https://www.youtube.

음성 녹음 관련 기능을 구현하는 와중에 아래와 같은 문제점이 발생했다.음성녹음의 길이가 오른쪽에 있는 시간의 화면을 잡아먹는 일이 발생했다.반대로 음성의 길이가 너무 작으면 아래와 같이 전체를 채우지 못하는 녹음화면이 나오게 된다.하지만 일반적으로 음성 길이가 길든 작

KMP(Kotlin Multiplatform)는 하나의 Kotlin 코드베이스를 여러 플랫폼(Android, iOS, Desktop, Web 등)에서 공유할 수 있도록 해주는 기술이제 Flutter나 React Native 앱 처럼 KMP를 이용하여 Kotlin 언언를

Koin은 Kotlin 언어에 맞춰 설계된 의존성 주입(Dependency Injection, DI) 라이브러리.Spring 같은 무거운 프레임워크 없이도, 간단한 DSL을 통해 객체 생성과 주입을 관리할 수 있도록 도와준다.KMP에서 현재 기준 Hilt는 지원을 안하

안드로이드를 사용하면서 내부 데이터를 저장할 때 Room을 많이 사용해봤을 것이다.보통 서버에 데이터가 왔을 때 저장하는 Paing3의 데이터를 Room에 저장할 때나 주로 사용한 것 같은데, Room Entity끼리 연관 관계를 사용해본 적은 없는 것 같다.뭐.. 실

KMP 프로젝트에서 테스트 코드의 작성방법에 대해 알아보자코드 작성 방법은 유튜브와 공식 문서를 참조해 간단한 테스트를 작성했습니다.assertK로 equals를 판단하는 라이브러리를 작성. 이후 commonTest에 의존성 주입영상에서는 test-annotaion-c

이번 KMP 프로젝트에는 Ktor를 이용한 서버 호출을 하는 방법을 알아보자.Ktor는 JetBrains가 개발한 코루틴 기반의 Kotlin 네트워크 프레임워크로, 클라이언트와 서버 애플리케이션을 모두 작성할 수 있도록 지원하는 비동기·멀티플랫폼 라이브러리다.안드로이드

저번에는 Ktor를 이용해 API 호출 하는 법을 배웠다.이번에는 내부에 데이터를 저장할 수 있는 DataStore를 사용하는 방법을 알아보자DataStore는 Android Jetpack 라이브러리 중 하나로, 앱에서 데이터를 안전하고 효율적으로 저장하기 위해 구글이

유튜브나 인스타그램같은 것을 보게 되면 데이터가 나오기 전에 회색 모양의 모습이 나오는 것을 볼 수 있다.보통 이런 UI를 Skeleton UI라고 하는데, Shimmer UI랑 차이점이 무엇일까??검색을 통해 알아본 바로는 아래의 차이점이 있다.Skeleton UI:

이번 KMP/CMP 예제는 권한 설정을 요청하는 것이다.안드로이드하고 IOS에서는 사용자에게 권한이 필요한 요청이 있다. 주로 음성 녹음, 동영상 녹화 등이 대표적인데, 안드로이드하고 IOS의 권한 설정 순서가 약간 다르다.안드로이드는 한 번 거부되어도 재요청이 가능하

특정 앱을 보면 연결이 끊기는 경우 팝업이 나오거나 연결이 안됐다는 화면이 나오는 것을 볼 수 있을 것이다.이를 구현하기 위해서는 ConnectivityManager를 이용해 구현이 가능하다.해당 구현 예제는 유튜브 강의를 통해 진행을 했다.Hilt나 koin같은 의존

후.. KMP프로젝트에서 iosApp의 설정을 바꿔주기 위해 Xcode를 실행하는 경우를 많이 봤었는데..특히 유튜브 강의를 통해서 따라할 때 Xcode에서 설정을 바꾸는 것을 많이 볼 수 있다.나도 일반적인 방법으로 따라하면서 해당 Xcode에 실행하려고 확인을 하려

이번 KMP 예제 프로젝트는 스플래시 스크린을 적용해보는 것이다.iOS나 Android에서 Splash Screen(스플래시 화면)은 앱을 실행할 때 제일 먼저 잠깐 보여주는 화면. 사용자가 앱 아이콘을 눌러 앱을 시작하면 → 운영체제가 앱 프로세스를 띄우는 동안 →

이번에는 날짜와 시간을 다루는 LocalDateTime을 이용해 KMP/CMP 프로젝트에 적용하는 방법을 알아보자.LocalDateTime이라고 해서 일반 java에 있는 LocalDateTime을 사용하는 것이 아니다.Kotlin Multiplatfor에서 사용하는

Circuit은 Kotlin 애플리케이션을 구축하기 위한 간단하고 가벼우며, 확장 가능한 프레임워크로, Compose 기반으로 만들어졌다. UDP(단방향 데이터 흐름)과 Presenters 아키텍처와 같이 핵심 원칙을 기반으로 한다.circuit 소개 내용 참고이번에는

Compose를 사용하면서 Navigation을 많이 사용해봤을 것이다.최근에 Navigation3가 1.0.0버전으로 production-ready 상태가 되어 실제 프로덕트에서 사용이 가능하다고 얘기가 들어서 이번 기회에 Naviagion3를 간단 적용 방법을 알아

안드로이드 핸드폰 무선 디버깅 시 QR로 하는 경우 연결이 제대로 안되는 경우가 많이 발생.이 문제점을 해결하기 위해 명령어로 쉽게 적용해보자먼저 터미널에서 adb 명령어를 사용했을 때 not command가 뜬다면 아래 명령어를 입력해서 설치하자brew install