본문 바로가기

Android

(16)
[안드로이드 | MpAndroidChart] 바 그래프의 하단 영역이 생길 때의 대처법 그래프를 활용한 뷰를 만들면서 실제 데이터를 적용하기 이전에 랜덤 값으로 바 그래프 데이터를 만들어 보여주고 있었는데, 값이 바뀔 때마다 이상하게 바의 하단영역이 비는 현상이 생겼다. 이를 해결하기 위해 다양한 설정값을 먹여보았으나 잘 듣지 않았고, 얼마간의 시행착오를 거쳤는데 정답은 그래프의 min max 값을 정하는데에 있었다. 아래와 같은 설정 값을 먹인 뒤로 해당 현상은 사라지게 되었다. 차트.axisLeft.axisMinimum = 0f 이어 추가로 바 그래프를 설정한 뷰의 영역에 꽉 채우고 싶어서 자료를 찾아보았는데 잘 나오지 않았고 이윽고 스택 오버플로에 직접 질문을 하여 해답을 구할 수 있었다. 차트.setViewPortOffsets(0f, 0f, 0f, 0f) 다만 현재 문제점은 차트를 ..
[안드로이드 | 코틀린] 데이터바인딩을 사용할 때 Fragment 내의 View 좌표 가져오기 이번에 신규로 구현하는 페이지에서 유저의 터치에 따라 화면 내의 커서를 특정 위치로 보내야 하는 요구사항이 있었다. 터치를 받는 곳은 별도의 뷰에서 들어오는 것이었기에, 터치는 터치대로 Listen해 마찬가지로 별도의 뷰로 되어있는 인디케이터를 움직여야 했다. 이를 해결하기 위해 커서가 가장 좌측으로, 그리고 우측으로 최대한 움직였을 때의 위치를 더미 View를 사용해 지정하였고, 둘간의 좌표 차이를 활용해 커서를 수평이동 시키기로 했다. 서론은 이정도로 마치고 데이터바인딩된 Fragmet 레이아웃으로부터 특정 뷰의 좌표를 가져오기 위한 방법은 아래와 같다. ... val binding = DataBindingUtil.inflate(inflater, R,layout.fragment_layout, cont..
[안드로이드] Exo Player에서 발생하는 java.net.MalformedURLException: unknown protocol 해결 Exo player 셋업을 마치고 player에 Uri 파일을 넘겨주는 과정에서 java.net.MalformedURLException: unknown protocol 에러가 발생하였다. player에 넘겨주고자 했던 건 프로젝트의 리소스 폴더 내 raw 폴더에 넣어둔 mp4 파일이었는데, 기타 다양하게 나와있는 Uri 생성 방법으로 해보았으나 실패하였고, 결론적으로 아래의 방식을 통해 문제를 해결할 수 있었다. val rawDataSource = RawResourceDataSource(context) rawDataSource.open(DataSpec(RawResourceDataSource.buildRawResourceUri(R.raw.sample_video))) val videoSource = Prog..
[안드로이드] 구글 플레이스토어 업로드시 발생하는 no properties to serialize found on class Exception 잡기 구글 플레이스토어에 앱 업데이트를 위해 알파버전을 업로드해 테스팅을 진행하고 있는데, 구글에서 테스트한 기기에서 발생한 것 이외에도 직접 업데이트를 진행했을 때 no properties to serialize found on class Exception 이 발생하면서 앱이 초기에 종료되는 현상이 있었다. 서치에다 수정을 반복해서(거의 반나절을) 오류를 잡을 수 있었는데 원인은 1. 번들이나 apk로 만들어질 때 릴리즈 버전에 적용되는 proguard rule 2. Firebase와 연관된 변수들이 private으로 적용됨 정도가 있었다. 1번의 경우 #firebase 관련 이슈 핸들링 위해 proguard rules 수정 -keep public class com.회사.entity.* -keepclassm..
[안드로이드] MVC, MVP, MVVM에 대해 알아보자 안드로이드 앱을 구성하는데 있어 베스트 프랙티스 패턴을 크게 고려하지 않는 편이었는데, (아마 전통적인 형태의 MVC에 가깝게 짜여지지 않았을까) 중장기간 개발과 유지보수, 업그레이드 및 테스트에 관련해 세가지 패턴을 알고 그에있는 장단을 알아두는 것은 분명하게 필요해보인다. Realm 아카데미에 세가지 패턴에 대해 아주 잘 설명해 둔 자료가 있어 이를 참조해 간단히 정리하며 익혀본다. 시작하기에 앞서 Best practice 접근법에 대해 보자면 What is Best practice? - Best practice 접근법이란 안드로이드 앱을 논리적 구성요소로 체계화하기 위해 생겨남. - MVC 패턴을 초석으로 모듈화되고 테스트 가능한 패턴으로 발전해 왔다. - MVP와 MVVM 패턴은 MVC를 대체하기..
[Bluetooth] BLE에 대한 간단한 정리 BLE(Bluetooth Low Energy)란? - 2010년 6월 30일, 블루투스 4.0 버전의 등장과 함께 제공된 프로토콜 중 하나 - 전력소모 최소화, 배터리 수명연장에 중점을 둔 프로토콜 - 다른 무선 전송규격에 비해 상대적으로 느린 편. > 현재 웨어러블 기기를 중점으로 주로 사용되고 있는 프로토콜로 알려져 있음. 핵심 구성요소들 - GATT (Generic Attribute Profile) 데이터를 어떠한 방식으로 주고받을지에 대해 정의함. - Central(혹은 GATT Client) 컴퓨터, 태블릿, 모바일 기기등 주로 데이터 요청과 송신을 하는 주체 - Peripheral(혹은 GATT Server) Central의 요청에 따라 데이터를 전송하는 객체 - Services 주변 BLE ..
[OPENGL ES] OpenGL ES 1.0, Batchinig으로 프레임 속도 압도적으로 개선하기 그동안 안드로이드에서 OpenGL ES 1.0 기반의 그래픽을 최적화하고, 프레임 속도를 개선하기 위해 참 다양한 작업들을 적용해 왔는데, 이번에 가장 월등한 해결책을 찾을 수 있었다. 여기까지 오기 위해 다양한 자료들을 참조하던 중에 통상적으로 쓰이는 그래픽 기술로 크게 Batching과 Culling이 있었다. (참조 : http://egloos.zum.com/littles/v/3440645 ) Batching은 쉽게 말해 픽셀을 모아찍는 것이고 Culling은 필요한 부분만을 드로잉하는 것이다. Culling의 경우에는 개념으로 따졌을때나 실질적으로 활용할때나 사용하던 기술로 어느정도 한계점에 다다른 상황이었고 Batching의 경우에는 아직 사용하지 못한 영역이었다. 주안점은 이것이다. Draw ..
[OPENGL ES] FloatBuffer allocation 관리를 통한 그래픽 최적화 앱 메모리 검사를 하면서 쌓이는 ByteBufferAsFloatBuffer, ByteBufferAsShortBuffer 등 때문에 의아해 했었고, 이것들이 OpenGL draw에 필수적인지, 항상 allocation 해주어야 하는지 서치와 실험을 계속했다. 결과적으로 ByteBuffer를 FloatBuffer에 nativeOrder로 간접적으로 할당해주어야 하는 방법은 일반적인데, 이를 한 픽셀을 draw 할 때마다 해 줄 필요는 없는 것이었고, 최초 draw를 시작하는 onSurfaceCreated 에서 한번 수행해주는 것으로 드로잉에 문제가 없음을 확인할 수 있었다. 다만, memory allocation은 한번으로 족하지만 이를 float 배열로 받아 put(values) 하고 position(0)..