본문 바로가기

[안드로이드] 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(..
[GIT] 이전 commit으로 돌아가 리모트 저장소에 최신 commit으로 올리기 한참 개발을 진행하다가 이전 commit이 현재 버전보다 더 나을때, 오류가 없을때, 어떠하든간에 과거 commit으로 돌아가고 싶었을 때 방법을 잘 몰라 과거 commit으로 돌아가기만 하고 결국에 리모트 저장소에는 업데이트 할 수 없는, 그리곤 브랜치를 새로 만들어 업데이트 했던 번거로운 방법을 사용했었는데, 이번에 아주 유용한 명령어를 찾았다. -f 명령어를 기존 push 명령어에 붙여줌으로써 이전 commit을 강제로 리모트 저장소에 push 하게 만드는 것이다. 우선 이전 commit으로 로컬 저장소를 되돌리고, 이를 add해서 push 해주어야 하는데 아래의 순서대로 진행하면 된다. git checkout 업데이트 하고싶은 가장 최근의 리모트 브랜치 git revert 돌아가고 싶은 commi..
[OPENGL ES] 안드로이드에서 SurfaceView의 배경 투명하게 Draw하기 안드로이드 앱에서 사용하는 OpenGL ES 뷰인 SurfaceView의 배경을 투명하게 하고자 시행착오를 좀 겪었는데 최종적으로 얻은 결과는 결과적으로 뷰의 배경은 투명하게 할 수 있었으나, SurfaceView가 무조건 레이아웃의 최상단을 차지하게 된다는 점이다. 구현방법은 우선 SurfaceView 클래스를 참조하는 부분에서setZOrderOnTop(true); setEGLConfigChooser(8,8,8,8,16,0); getHolder().setFormat(PixelFormat.RGBA_8888); getHolder().setFormat(PixelFormat.TRANSLUCENT);네가지 요소를 추가한다. PixelFormat.TRANSLUCENT의 경우에는 추가해주지 않아도 투명한 배경을 만..
[GIT] GIT 사용중 프로젝트에 불필요한 파일을 제외하기 프로젝트 개발을 하면서 몇몇 프로젝트에서는 빌드 이후에 자동으로 생성하는 몇몇 파일들, 즉 업로드 및 다운로드가 필요치 않은 임시파일 성격의 파일들이 생기고 GIT에 감지되는 것을 볼 수 있었다. 이게 브랜치를 여러개 두고 작업하다보면 항상 add해서 stash 하거나 업로드 하는등의 작업을 해주어야만 다른 브랜치로 띄어넘을 수 있어 상당한 귀찮음을 불러올 수 있다. 최근에는 안드로이드 개발중에 생기는 .idea/workspace.xml 파일이 계속 git에 걸려 checkout -- . 명령어를 수행하고서도 사라지지 않아 부득이하게 add하고 stash를 계속해주고 있었는데, 이번에 임계점이 와서 해결방법을 좀 찾아보았다. 참조한 방법은 아래와 같다.down voteIn the same dir wher..
[안드로이드] 기기의 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(..
[안드로이드] styles.xml 수정으로 간단하게 앱 전체 폰트 수정하기 먼저 앱에 적용할 커스텀 테마를 styles.xml에 본인이 원하는대로 만들어 준다. 다음에는 만든 커스텀테마에 item으로 추가할 RobotoTextViewStyle, RobotoButtonStyle 이라는 이름의style을 추가하고, 각 style의 android:FontFamily 아이템을 추가해 폰트를 sans-serif-light로 설정한다. 마지막으로 새로 만든 style을 item으로 커스텀 테마에 추가하는데, android:textViewStyle 에 @style/RobotoTextViewStyleandroid:buttonStyle 에 @style/RobotoButtonStyle 로 각 아이템에 맞춰 커스텀 스타일을 지정해주면 된다. 이제 커스터마이즈된 커스텀 테마를 매니페스트 파일안의 각..