android 8

Compose + AGSL 셰이더를 이용해서 간지나는 카드 애니메이션 만들기

어디선가 카드를 휘리릭 돌리면 카드가 돌아가면서 번쩍거리는 멋진 인터렉션을 본 적이 있는거 같다.셰이더나 애니메이션에 관심이 많아진 요즘 뭐라도 해보고 싶어서 뚝딱 해봤다. 일단 최종결과물부터 봐보자.꽤 멋져.  자자 액티비티부터 만들어준다.class MainActivity : ComponentActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        enableEdgeToEdge()        setContent {            MetalCardFilpTheme {                Scaffold(modifier = Modifier...

코루틴에 관한 50가지 질문과 답 - 1

1. Android의 Kotlin 코루틴은 무엇이며 기존 스레딩과 어떻게 다릅니까? 안드로이드에서 Kotlin 코루틴은 스레드와 다릅니다. 코루틴은 사용자 공간에서 구현되며 적은 수의 기본 스레드에 다중화됩니다. 그러므로 스레드를 만들고 파괴하는 오버헤드 없이 매우 가벼운 방식으로 코루틴을 일시 중지하고 다시 시작할 수 있습니다. Kotlin 에서 코루틴은 경량의 비차단 실행 스레드입니다. 즉, 스레드와 달리 코루틴은 사용자 공간에서 구현되며, 매우 가벼운 방식으로 일시 중지하고 다시 시작할 수 있습니다. 이를 통해 오버헤드 없이 많은 수의 코루틴을 실행할 수 있습니다. 2. 코루틴 맥락에서 "suspending functions"의 개념을 설명할 수 있습니까? 코루틴 맥락에서 suspending fun..

Android/Coroutine 2023.07.10

eventFlow 방식으로 이벤트를 처리하고 있을 때 든 생각

보통 sealed class 를 이용해서 각 이벤트마다 따로 묶어서 기능의 성격에 맞게 구분하는데 한 액티비티에 프래그먼트가 3개가 들어있는 화면이 있다고 가정하자 그리고 액티비티의 viewModel 을 모두가 공유하고 있는 상황일때 하나의 event flow 만을 이용해서 처리하면 각 프래그먼트에서 같은 flow 를 콜렉트 하는 상황이 생긴다. 이러면 다른 이벤트를 처리하기전 기존의 flow 를 해제해주지 않으면 한 곳에서 진행중인 collect 가 다른 프래그먼트로 가야할 데이터를 계속 가져가서 원하는 화면에서 원하는대로 동작하지 않는 상황이 생긴다. 그래서 내린 결론은 event flow 는 한 액티비티나 한 프래그먼트에서 즉, View 를 기준으로 같이 쓰이는 애들끼리 묶어서 따로 만들어주는게 관..

Android 2023.07.05

안드로이드 action mode

안드로이드에서 Text를 Select 즉 드래그 했을때 나오는 툴들을 변경하고 싶을때가 있다. 예를 들면, 이런식으로, Important를 꾹~ 눌려서 (Long press) Text를 Select한 뒤에 나오는 메뉴에서 '퀵번역'을 추가 하고 싶을 수 있다. 이런걸 구현하려고 하면 간단하게 함수 하나만 override하면 된다. @Override public void onActionModeStarted(final android.view.ActionMode mode) { Menu menu = mode.getMenu(); menu.add("퀵번역") .setEnabled(true) .setVisible(true) .setOnMenuItemClickListener(item -> { //해당 메뉴를 눌렸을 때..

Android/Android UI 2022.01.11

RxJava - subscribeOn, observeOn 를 제대로 쓰고 있는걸까?

해당 글은 https://vagabond95.me/posts/is-this-rxjava-1/ [안드로이드] 그런 Rx Java 로 괜찮은가 1 - subscribeOn, observeOn - 기록은 기억을 지배한다 구글은 점점 더 안드로이드 아키텍처를 리엑티브하게 구조화 하려는 움직임을 보이고 있고, Databinding, LiveData 그리고 RxJava 는 그러한 구조화 작업의 핵심 토대를 담당하고 있다. 또한 주력으로 vagabond95.me 을 읽고 깊게 Rx에 대해 고민하지 않았던 스스로를 반성하는 포스팅임을 밝힙니다. ㅜㅜ rx 를 사용하다보면 subscribeOn, observeOn 를 자연스럽게 만나게 된다. 나도 개인 프로젝트에 rx와 retrofit 을 연동해서 값을 받아오고 그 값을..

RxJava - Hot Observable , Cold Observable

이전에 쓴 글(아래 링크 참고) 에서 뒷쪽에 https://choi-dev.tistory.com/107?category=972011 RxJava - Observable을 제외한 다른 생산자들 전 포스팅에서는 Observable에 대해서 알아봤다. 기본적인 생산자였는데 Observable 0개에서 n개의 데이터를 전달하는 생산자다. 기본적인 생산자로 단건(0 or 1)이 아니면 대부분 Observable을 쓴다. observe choi-dev.tistory.com Subject 에 대한 이야기가 나온다. 그때는 간단하게 설명하고 지나갔는데 공부하던중 추가로 알게 된 내용이 있어서 포스팅한다. 먼저 이 이야기를 시작하려면 제목의 Hot Observable , Cold Observable 에 대해서 알고 넘어..

안드로이드의 Context 개념에 대한 개인적인 정리

Context 는 어플리케이션 환경에 관한 글로벌 정보를 접근하기 위한 인터페이스. Abstract 클래스이며 실재 구현은 안드로이드 시스템에 의해 제공된다. Context 를 통해, 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있을 뿐만 아니라, 추가적으로, 어플리케이션 레벨의 작업 - Activity 실행, Intent 브로드캐스팅, Intent 수신 등, 을 수행하기 위한 API 를 호출 할 수도 있다. 라고 안드로이드 개발자 사이트에서 찾아 볼 수 있는데 쉽게 예를 들자면 //Get an application name String applicationName = this.getPackageName(); //Start a new activity(application) this.startActi..

Android 2020.07.14