본문 바로가기

[안드로이드] 구글맵 객체를 참조해 onMapReady 함수 외부에서 제어하기 구글맵을 블루투스 기기를 사용해 간접적으로 제어하고자 했는데 구글맵이 레이아웃에선 fragment로 선언되어 있어 이를 단순히 onMapReady() 함수 안에서 GoogleMap을 다루듯이 사용하는데 조금 어려움이 있었다. 우선 아래는 맵 내비게이션을 위해 찾게 된 구글맵 레퍼런스 페이지에서 패닝(스크롤)를 위해 참고하고자 하는 내용은 아래와 같다. CameraUpdateFactory는 animateCamera()나 moveCamera()등 카메라 관련 메소드에서 사용할 수 있는데 우선으로 시험해보고자 animateCamera()를 사용하기로 했다. googleMap.animateCamera(CameraUpdateFactory.scrollBy(x, y)); 이제 정말 문제가 됬던 건 위의 코드를 onM..
[안드로이드] 안드로이드 오버드로우 개선 - 레이아웃의 background를 확인하자 앱 개발 단계가 잠시 소강상태에 있는동안 자잘자잘한 부분들까지 개선해서 기본적으로 최대한의 성능을 유지할 수 있도록 점검을 하고 있는 중이다. 그동안 메모리는 상당부분 건드려왔었기 때문에 레이아웃에 관련해서 개선점이 있을까 이전에 책에서 봤던 레이아웃 오버드로를 점검해보기로 했다. 대충 구글에서 말하고 있는 바로는 개발자 옵션에서 오버드로 옵션을 켰을때 붉은 부분이 최대한 나타지 않도록 하는것이 '권장' 하는 바로 되어있는데, 에서는 이 '권장'하는 부분, 오버드로를 제거함으로써 생각보다 상당한 성능개선이 나타난다는 점을 보여주고 있다. 그런고로 오버드로 옵션을 키고 앱을 쭉 실행해봤고, 아니나 다를까 겹치는 부분들이 상당히 있어 처음엔 부분 부분의 background를 @null로 설정해주었지만 큰 개..
[안드로이드] TabbedActivity에서 각 Fragment의 레이아웃 구성요소 설정 및 제어 저번에 TabbedActivity를 사용해 간단한 Swipe View 구현을 확인하였는데, 단순히 종이를 넘기듯이 기본 레이아웃만을 넘기는 데에 그쳐서 정말로 필요하던, 그러니까 레이아웃을 한 액티비티를 실행할 때 처럼 제어하고 애니메이션 및 리스너들을 붙일 수 있는지가 궁금했다. 서치를 통해 간단하게, 혹은 조금 번거롭게 이를 성공할 수 있었는데, 만들어진 TabbedActivity 클래스에서 프래그먼트를 Inflate 하는 onCreateView 부분에 기존 액티비티에서 사용하던 방식대로 뷰를 참조하고, 애니메이션을 적용하고, 버튼들을 선언해 사용할 수 있음을 확인했다. 조금 다르게 적용해줘야하는 점은 각 프래그먼트에 해당하는 뷰를 따로 선언을 해주고, 선언해 준 각 뷰에서 findViewById를 ..
[안드로이드] Swipe View 적용을 위한 TabbedActivity 생성 및 풀스크린 레이아웃 적용 기존에 버튼 형태로 넘어가던 결과화면을 보기 좋게 Swipe View로 만들어보기 위해 서치 및 적용을 했다 우선 참조자료 대로 합친 결과화면을 보여줄 TabbedActivity를 새로 만들어주면 아래와 유사한 레이아웃과 함께 fragment 레이아웃을 같이 자동으로 생성하고 이후 gradle에 필요 플러그인을 적용해두지 않았다면 알아서 안드로이드 스튜디오가 필요한 요소들을 선언하고 가져와 gradle sync를 한다. 아래는 생성된 Activity에 붙어있는 레이아웃으로, Title 및 페이지뷰를 먼저 제거하기 위해 일부 요소를 제거한 모습이다. Action 버튼도 사용하지 않을거면 바로 삭제해도 되는데, 아직 액티비티와 연결된 부분들이 일부 있고 향후 사용해 볼 여지도 조금 있어 일단은 남겨두었다. ..
[안드로이드] 안드로이드 Toast 메시지 딜레이를 조정하자 기존에 LONG과 SHORT 두가지 모드로만 Toast 메시지를 활용해오다가 이번에 LENGHT_SHORT 모드로도 딜레이가 길다고 느껴져 이보다 시간을 더 단축할 필요가 있었다. Stack overflow에서 이 문제를 Handler를 활용해 해결한 것을 참조할 수 있었다. final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT); toast.show(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { toast.cancel(); } }, 1000..
[안드로이드] 무한 효과음 재생을 위한 여정 (GoldWave를 적극 활용하자) 단순한 효과음 재생은 아주 손쉽게 구현할 수 있으나, 루프가 걸린 효과음이라면 말이 달랐다. 우선 효과음 자체를 단순 반복재생하는 것 만으로는 이어지는 사운드를 만들어 낸다는게 불가능했다. 아마 효과음 음원의 첫 시작부분과 끝 부분의 싱크가 맞지 않기 때문일거란 추측을 했다. 우선 구한 효과음을 가지고 무료 배포판 GoldWave를 통해 편집을 해보기로 했다. 위 캡처는 가져온 무료 경적 사운드 중 일부를 단순히 자른 음원의 파형인데, 눈여겨 볼것은 사람의 귀에는 단순히 한번의 음으로 들리는 음에도 처음부터 끝까지 미묘한 파형이 존재한다는 것이다. 한 음원을 늘이거나 줄이고 싶을 때, 붙이거나 잘라내고 난 뒤 파형의 높낮이가 일치하지 않는 부분이 있다면 연속재생시 뚝뚝 끊기거나 부자연스러운 (마치 렉걸린..
[안드로이드] 구글맵에서 GeoCoder와 Animation Listener를 활용해 검색 위치 표시하기 구글맵 API를 활용하면서 텍스트뷰에 입력된 장소를 검색해 해당 위치로 카메라를 이동하는 정도로 테스트를 해보고 싶었다. 서치를 통해 Geocoder를 가지고 검색된 내용의 주소와 위도, 경도 정보를 가져올 수 있는 것을 알 수 있었다. 문제는 검색이 완료되었다는 것을 버튼을 가지고 알리는 것이 아니다보니 검색 완료를 어떻게 알려줘야 되나가 중요했다. 다행히 구글맵을 출력할 때 애니메이션 객체를 활용해 구글맵을 출력하고 있었기 때문에, 여기에 AnimationListener를 달아줌으로써 구글맵을 띄우는 Animation이 끝나는대로 텍스트 뷰에 들어간 내용을 가져와 GeoCoder를 통해 주소와 위도,경도 정보를 마커에 적용하고 카메라를 이동시킬 수 있었다. 참조한 블로그 포스트 내용으로 보아서는 ge..
[안드로이드] onClickListener와 onTouchListener에 의한 Memory Leak 잡기 저번에 메모리 leak을 한번 해결했음에도 불구하고 다시 때때로 발생하는 메모리 leak 때문에 골머리를 썩고 있다. 다양하게 발생하고 있는 leakage 중에 onClickListener, onTouchListener와 관련된 부분들이 있었고, 이를 제하기 위해 서치를 했다. 우선 액티비티에서 버튼등에 설정해 준 Listener가 어느 부분에서 선언되느냐, 그리고 어느 곳에서 설정되느냐에 따라 Activity가 종료 된 이후에도 메모리에 관련 값을 참조한 채 상주하게 되는 경우가 있다 판단하였고 해결책으로 설정해두었던 Listener들을 onDestroy 부분에서 다시 null 로 전부 설정해 줌으로써 이후 OnClickListener 관련 Memory Leak이 어느정도 줄어든 것으로 보여진다. 다양..