본문 바로가기

Android

(48)
필드(멤버변수) 초기화는 super 생성자가 모두 끝나야 이루어진다. https://stackoverflow.com/questions/15682457/initialize-field-before-super-constructor-runs
[Android] Robolectric 을 활용한 유닛테스트 resources 에서 가져온 스트링값, 서버에서 내려준 필드를 조합하여 특정 스트링을 만드는 클래스가 있는데 이에 대한 유닛테스트 코드를 짜려고 한다. 유닛테스트에서는 안드로이드 프레임워크에 의존성이 있는 클래스들을 참조할 수 없다. 이유는 그냥 Robolectric 검색하면 다양한 포스팅이 있으니 참고할 것. 아무튼 위와 같은 이유로 resources 참조를 위해 Robolectric 을 사용하면서 나온 빌드 에러, 해결방법 등을 대충 정리해두려고 한다. (발견하면 추가할 것) 오류1) 빌드 실패 Failed to transform artifact 'bcprov-jdk15on.jar (org.bouncycastle:bcprov-jdk15on:1.68)' to match attributes {artif..
[Android] ExoPlayer2 현재 재생위치 가져오기 ExoPlayer2 에서 currentPosition(현재 재생위치) 가져오는 방법에 대한 포스팅이다. 본문 요약 - ExoPlayer 에서 재생위치를 실시간으로 가져오려면 폴링 방식으로 플레이어에 직접 요청해서 체크해야한다. (주기적으로 상태 체크해서 exoPlayer.getCurrentPosition()) 회사 프로젝트 내 기능중 동영상플레이어 구현을 위해 ExoPlayer2 라이브러리를 사용하고있는데, 현재 재생위치 콜백을 받아야하는 니즈가 생겼다. 당연히 관련 리스너를 등록하면 바로 가져올 수 있을 줄 알았는데 player 에서는 제공하고있는 리스너는 재생상태 뿐이었다. 더보기 더보기 interface EventListener { /** * Called when the timeline and/or..
[Android] CoodinatorLayout 사용시 만났던 에러 app:layout_behavior="app:layout_behavior="@string/appbar_scrolling_view_behavior" not found 그냥 머티리얼 디자인 디펜던시 추가해주면 된다. 해당 스트링 리소스는 기본 탑재가 아니고 머티리얼에 들어가있다. 그냥 Coordinator 랑 같이 있어주면 덧났던걸까..? implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0" implementation "com.google.android.material:material:1.3.0"
[Android] kotlin extension 관련 compile error 입사 초기에 코틀린 익스텐션 뷰 아이디를 덩그러니 뒀을 때 아래와같은 컴파일 에러가 발생했었다. e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation Cause: Back-end (JVM) Internal error: wrong code generated org.jetbrains.kotlin.codegen.CompilationException Back-end (JVM) Internal error: Couldn't transform method node: ... Cause: Error at instruction #125 GOTO L0: Incompatible stack heights Elemen..
[Android] 간단한 그리기 및 지우기 with S-Pen 스타일러스펜(SPen)으로 드로잉하는거 대충 테스트해보다가 기억할겸 정리한다. 설명은 간단히 주석으로 달았다. 팜리젝션을 위해 일반 터치 이벤트는 무시하고 SPen 만 인식하도록 구현했다. 터치 이벤트가 발생한 좌표에 그리기, 펜에 있는 버튼을 누른 채 문지르면 지워진다. (획단위 아님) 풀 코드 class DrawingView(context: Context, attributeSet: AttributeSet) : View(context) { init { // 아래와 같이 지정해주지 않으면 지우개모드에서 이상한 검정색 원이 생긴다. // 참고로 기본 동작은 LAYER_TYPE_SOFTWARE 인데 자세한 내용은 찾아봐야한다. setLayerType(FrameLayout.LAYER_TYPE_HARDWARE,..
[Android] ConstraintLayout Helper - Group group 은 ConstraintLayout 에서 제공하는 helper 중의 하나로, 여러 뷰들의 visibility 를 그룹으로 묶어 편리하게 관리할 수 있게 해준다. ConstraintLayout 으로 뷰를 구성하다보면 모든 뷰들이 flat하게 존재하기 때문에, visibility 를 한 묶음으로 변경해야할 때 보일러플레이트 코드가 많아질 수 밖에 없다. iv_remote.visibility = visibility tv_remote_count.visibility = visibility iv_vacation.visibility = visibility tv_vacation_count.visibility = visibility another_view1.visibility = visibility anothe..
[Android] 점선 그리기(Dotted line) 앱에서 점선을 나타내고 싶을 때 아래와 같은 shape.xml 리소스를 만들고 * 참고로 shape - line 을 정의할 때에는 stroke 속성이 꼭 정의되어야한다고 문서에 나와있다. 그리고자 하는 뷰를 추가하고 위에서 정의한 xml 리소스를 background 로 설정해주면 끝! 그런데 android:layerType 속성을 software 을 설정하지 않을 경우, 아래처럼 제대로 보이지 않는 경우가 있다. (첫번째 뷰에만 android:layerType="software" 적용) 다른 디바이스에서는 따로 설정해주지 않아도 제대로 보인다. android:layerType 속성은 은 뷰를 렌더링하는 연산을 CPU(software)에 맡길지, GPU(hardware)에 맡길지 결정하는 속성이다. 앱 전..