본문 바로가기

개발자의 기록 노트

(153)
[안드로이드] Preferences 다루기 - 앱의 환경설정을 위한 Class 안드로이드 Preferences 다루기 앱을 개발하다보면 각각의 사용자별로 선호하는 값들을 저장하는 화면을 제공해야 할 때가 있다.게시물을 보여주는 앱을 예를들어 보자. 한화면에 보여지는 글의 목록을 어떤 사용자는 10개를 선호하는 반면, 어떤 사용자는 5개를 좋아한다면 앱개발자가 글 목록의 개수를 강제로 고정시킬 것이 아니라, 사용자 별로 설정을 할 수 있게 허용하는 것이다. 이것을 '환경설정' 혹은 'Preferences' 라고 하며, 안드로이드 플랫폼은 이런 것을 구현하기 편리하도록 기능을 제공한다.안드로이드 플랫폼은 Data를 저장하는 방법으로 환경설정(이하 Preferences), 파일, Local DB, 네트워크를 제공한다. 그 중 Preferences는 가장 간단하게 정보를 저장하는 방법(m..
[안드로이드] 서로다른 Activity 사이에 Parcelable사용하여 데이터/객체 전달 및 받는 방법 서로다른 액티비티(Activity) 사이에 Parcelable사용하여 데이터/객체 전달 및 받는 방법 Parcelable의 정석적인 사용방법은 아니지만, 객체의 포인터를 액티비티간 주고 받는 방식으로 보면 될 것 같다.물론 자바는 포인터가 없지만 여기서 사용한 방법은 개념상 포인터를 넘기는것과 같다고 봐도 무방할것 같다. 이미 잘 알려진것과 같이, 안드로이드에서는 서로다른 엑티비티 사이에서 객체를 주고 받기 위해서는 Intent를 이용한다.그런데 기본 데이터 형인 int, String, short, float... 등이 아니라 사용자 정의 Class의 instance를 넘겨야 하는 상황이라고 생각해보자.어떻게 해야할까?이때 사용되는 interface가 Parcelable 이다.기본 자료형 int, boo..
[안드로이드] 이미지와 텍스트가 같이 들어간 버튼 만들기 이미지와 텍스트가 같이 들어간 버튼 만들기안드로이드 SDK(1.5기중)에는 버튼을 처리하는 클래스가 Button과 ImageButton 크게 두가지 있다. ImageButton이 내부에 이미지를 가지고 있는 버튼이고, Button은 TextView를 상속하고 있기에 텍스트 버튼이라고 생각하기 쉬운데, 사실 그렇지 않다.일반적으로 버튼을 표시할때 간단하게 해당 버튼의 기능을 시각화 하여 나타내는 간단한 Icon을 함께 넣어주는 경우가 많을텐데, 그런 경우 ImageButton대신 Button을 활용해서 처리할 수 있다. 이미지의 위치는 텍스트의 상, 하, 좌, 우에 위치시킬 수 있으며, Xml에서는 각각 android:drawableTop, android:drawableBottom, android:draw..
[안드로이드] Bitmap 과 ByteArray 상호변환 Bitmap 과 ByteArray 상호변환 이 포스팅은 Bitmap 데이터 형을 ByteArray로 변환하거나, 혹은 그 역, ByteArray -> Bitmap으로 변환하는 방법을 예제코드와 함께 다룬다. 안드로이드 카메라와 이미지를 다루다보면, 종종 데이터 형(type)이 달라서 형변환을 해야 하는 상황이 발생한다. 그때 필요한 내용이다. 방법을 간단히 요약하자면 아래 두줄만 보면 된다. Bitmap -> ByteArray : ByteArrayOutputStream 인스턴스를 생성한 후, Bitmap의 compress 메서드를 통해 비트맵을 압축하여 stream에 담는다. ByteArray -> Bitmap : BitmapFactory의 decodeByteArray 메서드를 통해 byte Array를..
[안드로이드] 인터넷에서 이미지 비동기 다운로드 안드로이드 인터넷 이미지 비동기 다운로드보통, 인터넷에서 이미지를 다운로드 하는 코드를 아래와 같이 사용하는 경우가 종종 있었다.그러나 잘못된 사용방법이라고 한다. 잘못된 사용 예URL url = new URL(imageUrl); bitmap = BitmapFactory.decodeStream(url.openStream()); 이미지 주소로 URL 객체를 만든 후, BitmapFactory의 decodeStream( )의 인자로써 생성한 URL객체의 openStream( ) 메서드를 호출하고 있다.그러나, 아래와 같은 방법으로 사용하는 것이 올바른 사용 방법이라고 한다. 올바른 사용 예 HttpGet httpRequest = new HttpGet(URI.create(imageUrl) ); HttpClie..
[안드로이드] 증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm) 증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm) 노름(Norm)은 일종의 '벡터의 크기'를 일반화시킨 것이라고 생각하면 쉽다.선형대수학 및 함수해석학 등의 분야에서 쓰인다. 선형대수학 및 함수해석학에서는, 노름(영어: norm 놈[*])은 벡터 공간의 원소들에 대하여 일종의 ‘길이’ 또는 ‘크기’를 부여하는 함수 라고 정의한다.0 벡터의 노름은 0 이며, 그 외의 모든 벡터는 양의 실수 노름을 갖는다.한편, 반노름(半norm, 영어: seminorm 세미놈[*])이라 하는 개념이 있는데, 이는 영 벡터 이외의 벡터도 노름이 0 이 될 수 있도록 조건을 약화한 것이다. 노름(Norm)은 다음 조건을 만족시켜야 한다. Lp노름은 다음과 같이 정의된다. 한마디로 말하면, 각 성분들의 절..
[안드로이드] 안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점 안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점 안드로이드는 가속도 센서나 조도 센서와 같은 다양한 종류의 센서를 다루기 위한 API 를 제공하고 있다. 그 중 가장 일반적으로 사용되는 센서 두 가지는, 가속도 센서와 자기장 센서(나침반 센서) 이다. 어플리케이션과 디바이스는 이 두 가지 센서를 사용자 입력값으로 활용하여, 디바이스 스크린을 어느 방향으로 돌릴지 결정하는데 사용하곤 한다. 그러나, 최근 이와 관련된 새로운 문제가 발견되었다. 새로 출시된 디바이스들 중에는 (모토롤라의 CHARM 과 FLIPOUT 이라는 모델) 기본 화면 모드로 포트레이트(portrait) 모드 대신 랜드스케이프(landscape) 모드를 사용하고 있다. 따라서, 기본 화면이 세로로 길쭉하지 않고 가로로 넓..
[안드로이드] 카메라 해상도 바꾸기 안드로이드 카메라 해상도 바꾸기 카메라를 찍을때 촬영할 이미지의 해상도를 변경하는 방법을 보여주는 예제코드 입니다. 아래 코드는 APIDemo에 있던 Camera 소스를 약간 변경한 것입니다. Preview Class는 카메라에서 1600 * 1200 (2MP)과 가장 가까운 해상도를 찾아서, 그 해상도로 촬영을 해 주는 역할을 합니다. Activity에서 불러오는 방법은 APIDemo에 있는 Camera소스를 찾아 보시기 바랍니다. class Preview extends SurfaceView implements SurfaceHolder.Callback { private static final int IMAGE_WIDTH = 1600; // 촬영할 가로 픽셀 수 private static final in..