상황은 액티비티에 surfaceview로 카메라화면이 작동되고 있고, 

그 위에 이미지뷰가 띄워져있는 상태에서 이미지를 드래그하거나, 확대 축소하는 이벤트를 달아야하는 상황이었다.

하지만 view라는 타켓에 이벤트를 걸려고 해도 이벤트가 걸리지 않았다(로그로 찍어봤는데 메소드에 진입하지 못했다.)

구글에서 검색해보니 기본적인 개념의 문제였다. 


이미지뷰에 setOnTouchListener라는 것을 걸어 주어야 리스너가 작동된다는 것을 알았다.

이런식으로 코드를 구성해주어야 동작하였다. 내부구조가 왜 이렇게 되는지에 대해서는 좀 더 

알아볼 필요가 있을 것 같다. 



Posted by slender ankles
,

안드로이드의 멀티 터치 줌 기능이 필요했다. 

상황은 surfaceview에 카메라를 얹고, 이미지뷰로 그림을 불러와 사용하였다. 

그리고 이미지를 손가락 하나로 이동시키거나, 

손가락 두 개를 이용해 확대/축소 기능도 제공해야 했다. 


다음의 소스를 활용했다. 

xml에서 imageview는 match_parent 속성을 가지고 있어야 한다. 

Posted by slender ankles
,

비트맵이 R.id로 접근이 가능한 경우 

다음과 같은 방법을 사용해 볼 수 있다. 


Posted by slender ankles
,

카메라 surfaceview를 사용하면서 당연히 버튼이라든지 이미지뷰와 같은 것이 사용된다. 

우선 이 같은 버튼이나, 이미지뷰는 메인 UI 스레드에서 돌아가게 될 것이다. 

구글에서 찾아보니 Linear Layout에 이미지뷰를 띄웠었는데 이러면 안되고 Relativelayout에 이미지뷰를

띄우면 된다고 해서 해봤더니 됐다. 

Posted by slender ankles
,

보통의 앱에서 카메라를 띄워줄때는 위의 알림창과 같은 타이틀바가 모두 제거된 상태로 

뷰가 나오는데, 이 부분에 대한 구현? 환경설정이 필요했다. 


안드로이드 알림 바 지우기

메니페스트.xml에 다음을 추가시켜준다. 



=> 메니페스트 파일 수정에는 extends가 ActionBarActivity여서는 안 된다. 

그냥 Activity여야만 한다. 이걸 몰라서 쫌 헤맸다.

Posted by slender ankles
,

surfaceview 위에 카메라를 구동 시키는 구현을 해야 했다. 

surfaceview란 메인 UI 스레드가 아닌 다른 스레드에서 구동되는 view다. 

surfaceview를 사용하는 이유는 카메라와 같이 매 초당 빈번하게 화면을 갱신해주는 작업이 수행되면 UI 스레드는 제대로 동작을 할 수 없게 된다. 

이러한 이유로 카메라를 띄워주기 위해서는 surfaceview를 사용하는 것이다.


surfaceview 위에 카메라 화면을 올리었는데

화면 회전 시 카메라 각도가 변하지 않는 현상이 발생했다. 

구글을 통해 찾아보니 간단히 답을 낼 수가 있었다. 


화면이 회점함에 따라 일정하게 카메라의 회전을 주는 방법이다. 

surfaceChanged의 mCamera.startPreview()이전에 코드를 작성해서 사용해주면 된다. 



Posted by slender ankles
,

android:layout_width 는 위젯 또는 레이아웃의 넓이를지정하는 속성입니다.

android:layout_height 는 위젯 또는 레이아웃의 높이를지정하는 속성입니다.

속성값으로 match_parent 는 부모 레이아웃을 꽉 채우도록최대한 크게 지정하는 방식입니다.

속성값으로 wrap_content 는 내부에 존재하는 콘텐츠의 크기에맞게 조절하는 방식입니다.

레이아웃의 경우에는 내부에 있는 위젯 또는 레이아웃이 콘텐츠가 됩니다.

위젯의 경우에는 내부에 있는 이미지 또는 텍스트가 콘텐츠가 됩니다.


추후 안드로이드 레이아웃에 대해서 자세히 정리 할 필요가 있겠다.

Posted by slender ankles
,

안드로이드 스튜디오든 이클립스든 어쨋든 런타임 디버깅을 위해 LOGCAT을 반드시 사용해야한다.

Debug하는 방법

public final static String LOG_TAG = "LOG_TAG";

Log.d(LOG_TAG, "로그를 찍어볼려고하는것");

이런식으로 사용하면 된다. 

LOG는 스트링들만 찍어볼수있다. 

int형 또는 float형 등을 사용하기 위해서는 

Log.d(LOG_TAG, int변수 + " ");

이런식으로 사용하면 된다. 

Posted by slender ankles
,