본문 바로가기

ANDROID

(125)
[안드로이드] Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1) 관련 오류는 Lolipop에서는 아예 일어나지 않는 오류정도 였는데, 요즘 테스트 기기가 킷캣으로 제한되다 보니 멈췄다 하면 로그를 봤을때 다반수가 SIGSEGV 오류인 걸 볼 수 있었다. 골치아픈건 이게 네이티브 레벨에서 일어나는(메모리단에서?) 오류라 코드로 일어나는 부분을 확인하기가 어렵다는 점이다. 덕분인지 원인도, 해결방안도 가지각색으로 나오는 걸 서치해보면 확인할 수 있다. 그중에 분명한건 어느 시점에서 오류가 발생하는 게 느껴질 정도로 빈도가 잦은 구간이 딱 있어서 해당 액티비티 안의 코드를 중점으로 이것저것 작업을 해보고 있다. 관련해서 테스트를 하면서 오류가 발생하는 대로 계속 상처를 덧대듯이 보완사항을 적용해보고, 또 게시글에 업데이트 할 예정이다. 그동안 적용한 해결책은 아래와 같다...
[안드로이드] Custom animation 정의를 통한 액티비티 전환 애니메이션 적용하기, static 클래스 내부에서 overridePendingTransition 사용하기 overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); 기존에는 위와 같은 간단한 안드로이드 기본 애니메이션을 활용해서 액티비티 전환 애니메이션을 사용했는데, 단순한 Fade in, fade out을 떠나 슬라이드 쇼처럼 위 혹은 옆에서 액티비티 화면이 들어올 수 있도록 하고 싶었고, 서치를 통해 아주 유용한 페이지를 찾았다. http://wimir-dev.tistory.com/23 참조한 페이지를 통해 프로젝트의 res 폴더에 anim 리소스 폴더를 만들고, slide_up.xml, slide_down.xml 을 생성 이를 아래와 같이 적용해 응용하였다. overridePendingTransition(R.anim.slide..
[안드로이드] PorterDuff.Mode로 적용 가능한 다양한 옵션을 활용하자 progress.getIndeterminateDrawable().setColorFilter(Color.rgb(60, 179, 113), android.graphics.PorterDuff.Mode.SRC_IN); 프로그레스 바의 커스텀 색을 입히기 위해 활용했던 android.graphics.PorterDuff.Mode 를 새로 적용한 프로그레스 바의 테마에는 잘 어울리지 않아 다른 모드들이 있는지 찾아보게 되었고 관련되어 정리가 잘 되있는 안드로이드 developer 페이지를 찾았다. 기존에 적용해주던 옵션은 android.graphics.PorterDuff.Mode.MULTIPLY 였는데 하나의 원만 도는 기존 프로그레스 바와 달리 겹쳐서 두 개의 프로그레스 바가 돌아가는 듯한 현상이 생겨 하나의 dr..
[안드로이드] 레이아웃에 동적으로 이미지뷰 추가하기 (ScalableLayout을 활용한 경우) 이미 명시된 이미지뷰의 위치를 애니메이트 하거나 이동시키는 건 어느정도 익숙했지만 동적으로 xml파일로 명시되지 않은 이미지뷰를 원하는 크기와 위치에 추가하는 건 해보지 않은 일이었다. 여러 자료들을 참조했고, 다음과 같은 큰 단계들을 따라 목표를 달성할 수 있었다. 1. 추가하고자 하는 속성의 뷰를 선언하고, 속성을 지정한다. setLayoutParams에서는 뷰의 필수값인 layout_width, layout_height을 아래와 같이 지정해주게 된다. ScalableLayout이 아닌 기타 width, height 값을 정해 만들고자 한다면 WRAP_CONTENT로 넘겨주고 있는 부분을 조정해주면 된다. ( 이 경우에는 다음 페이지를 참조할 것 : https://stackoverflow.com/qu..
[안드로이드] ViewPager를 사용하는 swipe view에서 페이지 다시 생성을 방지하기 기존에 두 개의 페이지에 ViewPager가 포함된 swipe 뷰를 구현해 두었었는데, 한 개의 페이지를 다시 추가하게 되면서 세 개의 페이지를 swipe로 움직여 볼 수 있도록 하였다. 헌데 문제는 한번 마지막 페이지까지 움직이고 난 뒤 첫 페이지로 돌아가면 세번째로 보여주던 페이지를 다시 보여주는 현상이 있었다. 로그를 찍어보니 기존 코드에서는 페이지를 swipe 할때마다 새로 뷰를 만들어 보여주는 것을 볼 수 있었는데, 이때문에 페이지 이동마다 페이지 인덱스를 참조해야되나 하는등의 시행착오를 겪었는데 잘 되지 않았고 시간이 있고나서 찾은 방법은 ViewPager에 setOffscreenLimit을 거는 것이다. ViewPager.setOffscreenPageLimit() ViewPager는 Swip..
[안드로이드] Canvas를 활용해 커스텀 뷰에 선 그리기 (drawPath) 안드로이드 Canvas의 drawLine() 을 활용해 그래픽 위에 선을 그리고자 하였다. 향후 다시 참고하고자 필요한 단계들과 중요사항들을 적어두고자 한다. 1. Canvas 클래스 만들기 프로젝트 안에 View를 상속받는 임의의 Canvas 클래스를 만든다. (MyCanvas, mCanvas 등)... public class MyCanvas extends View { private Paint paint = new Paint(); private Path path = new Path(); private Canvas myCanvas = new Canvas(); private boolean is_first; public MyCanvas(Context context) { super(context); init(..
[안드로이드] 기기의 GPS 정보를 따라 위도, 경도를 가져오기 (FusedLocationProviderClient) 앱에서 구글맵 API를 이용할 때 setMyLocationEnabled(true) 옵션을 통해 맵 카메라를 현재위치로 이동할 수 있었지만, 하고싶었던건 맵 프래그먼트를 띄웠을 때 기기의 초기 GPS 정보를 가져와 위도경도를 따라 카메라를 위치시키는 것이었다. 이를 위해 여러가지 자료를 참조하고 적용해봤지만 최종적으로 안드로이드 developers 페이지에서 공식적인 해답을 얻을 수 있었다. 1. 우선 첫째로는 매니페스트 파일에 아래와 같은 권한이 추가되어 있는지 확인한다. 2. 둘째로 onCreate부분에 mFusedLocationClient 를 아래와 같이 가져온다. private FusedLocationProviderClient mFusedLocationClient; // .. @Override pr..
[안드로이드] 터치이벤트를 수동으로 생성해 입력하기 안드로이드 단말기의 화면이 아닌 다른 입력값을 따라, 코드로 입력을 제어하고자 했는데 생각보다 리소스가 없어서 고생을 했다. 그러다 테스트에 성공한 소스를 찾았는데, MotionEvent 를 활용하여 손으로 화면을 터치했을때와 비슷하게 터치를 코드로 시뮬레이션 할 수 있는것을 알 수 있었다. 먼저 아래와 같은 소스를 이벤트를 생성하는데 사용하고자 하는 함수로 생성해준다. 넘겨주는 인자는 터치를 어느 x, y 좌표에 넣을 것인것과 MotionEvent를 어떤 것으로 넣을것인가 정도를 지정해 주면 된다. // Obtain MotionEvent object long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(..