본문 바로가기

전체 글

(37)
[Android] MVVM - ViewModels AntiPatterns #ViewModel Antipattens 대표적인 Android ViewModel Antipattern 2가지 [Antipattern] 1. Android Framework 종속성을 가지는 클래스를 사용 (Don’t let ViewModels (and Presenters) know about Android framework classes) 테스트나, 메모리 누수나, 모듈성을 위해서 일반적으로 android.* 클래스들을 ViewModel에서 사용하지 말란 뜻( but 예외도 있음 android.arch.* 같은.. ) 2. ViewModel에서 View 를 Reference ( Avoid references to Views in ViewModels.) View와 ViewModel이 아래 그림과 같이 생명..
[Android] ImageView를 Toggle 버튼처럼 사용하기 #ImageView를 Toggle 버튼처럼 사용하기 1. state_selected에 따라 이미지가 달라지는 selector 작성 2. ImageView의 src를 작성한 selector로 지정 3. ImageView의 onClickListener에서 클릭할 때마다 isSelected 값 토글 1) 2) 3) findViewById(R.id.iv_toggle).setOnClickListener { it.isSelected = !it.isSelected }
[Android] 바(Bar) 프로그레스 애니메이션 #Bar Progress Animation (with gradient) 간단한 Bar 프로그레스 Animation에 대해 알아보겠습니다. 애니메이션은 여러가지 방법으로 만들 수 있지만, 이 글에서는 'Animation' 클래스를 상속 구현 한 법으로 소개합니다. 1. xml에서 Android.widget.ProgressBar를 작성 2. 필요 시 progressDrawable을 작성(그라데이션이 필요하거나 꾸미려면...) 3. Animation 클래스를 상속 후, applyTranformaion을 override 해서 ProgressBar의 pregress를 업데이트 #1 - xml에 ProgressBar 작성 #2 -progressDarwable 작성 오른쪽 top/down 코너만 Radius를 설정했..
키패드 외부 영역 Touch시 clearFocus override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { val focusView = currentFocus if (focusView != null) { val rect = Rect() focusView.getGlobalVisibleRect(rect) val x = ev!!.x.toInt() val y = ev!!.y.toInt() if (!rect.contains(x, y)) { val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(focusView.windowToken, 0) focusView.clearFocus() } } re..
[Android] 원형(Circle) 프로그레스 애니메이션 #CircleProgress Animation (with gradient) 원형 프로그레스 Animation에 대해 간단히 필요한 부분만 알아보겠습니다. 1. CustomView에서 drawArc 이용 2. ValueAnimator를 이용해 Draw할 Progress를 계산 3. 업데이트 된 Progress를 drawArc *Arc = 호 #1 - attr.xml 정의 따로 설정해서 사용하고 싶은 속성값들을 정의 합니다. 기본적으로 아래의 값들만 설정값으로 받고, 나머지는 하드코딩 되어 있으니 필요하다면 추가설정해서 사용 하면 됩니다. attr.xml 레이아웃.xml 레이아웃에서 attrs.xml에 정의했던 속성들을 설정해서 사용합니다. com.example.animatin.CircularProgress..
[JVM/DVM/ART] 한 줄 정리 JVM 플랫폼에 독립적 윈도우, 맥 리눅스 어느 OS 플랫폼에서 한 번 컴파일 된 Java Byte Code가 실행될 수 있다 Write Once And Run Anywhre DVM (Dalvik Virtual Machine, JIT 컴파일러) 모바일 기기 환경에 최적화 되어 나온 가상머신(모바일 기기는 특성상 배터리 수명, 메모리, 컴퓨팅 파워 등이 부족하니께) 실행시에 인터프리팅 시작 ART (AOT 컴파일러) 퍼포먼스가 개선된 새로운 런타임 환경. 설치 시점에 바이트 코드를 기계어로 번역하기 대문에, 전체적인 퍼포먼스가 좋아지고 수명이 향상됨
[Android] aab를 apk로 변환 #aab -> apk aab로부터 apk 변환해서 설치 테스트를 해야 할 경우가 있다. 1. bundletool이 필요하므로 다운로드 하자 https://github.com/google/bundletool/releases 2.apk 변환 (JAVA 설치 돼 있어야 함) java -jar "bundletool-all-1.8.2.jar" build-apks --bundle="경로\XXX.aab" --output="경로\XXX.apks 3.연결된 디바이스에 APK 바로 설치 java -jar "bundletool-all-1.8.2.jar" install-apks --apks="경로\XXX.apks" 4.다양한 옵션들이 있는데 공식 문서에서 찾아보는 것도 도움이 되겠다 https://developer.andro..
[Kotlin]Coroutine - 백그라운드에서의 실행 디벨러퍼 공식문서를 바탕으로 코루틴으로 백그라운드 작업을 실행시키는 방법을 알아보겠습니다. #Coroutine - 백그라운드 작업 Developer Instruction to coroutines - https://developer.android.com/kotlin/coroutines?hl=en 서버에 로그인을 요청하는 Developer 사이트의 예제입니다 class LoginViewModel( private val loginRepository: LoginRepository ): ViewModel() { fun login(username: String, token: String) { // Create a new coroutine to move the execution off the UI thread vie..