김형준 GIS 연구소 (for Developers)  
Front Page
Notice | E-Mail | Admin | Write Article   
 
2010/09에 해당하는 글 8건
2010/09/27   [ActionScript] 사용자 정의 이벤트 추가하기 (2)
2010/09/19   [ActionScript] 이미지 파일을 이용해 배경 화면 채우기
2010/09/18   [ActionScript] Array의 원소 추가/삭제 (5)
2010/09/13   [안드로이드] 이런.... 무책임한 개발환경 같으니... (2)
2010/09/13   ftp 명령어 사용예 (2)
2010/09/10   [ActionScript] Event 클래스의 target과 currentTarget 속성 (4)
2010/09/07   [안드로이드] SD 카드에 파일 생성 (4)
2010/09/01   [안드로이드] 사용자 정의 Adapter 만들기 (9)


2010/09/27 18:29 2010/09/27 18:29
[ActionScript] 사용자 정의 이벤트 추가하기

추가해야할 이벤트는 많으면서 또 짐작하기 어렵고.. 시간이 없으니.. 일단 정리를 하여.. 추후 까막까막해져 혼란이 없으면 하는 바램에서 사용자 정의 이벤트를 추가하는 방법에 대해 정리를 해봅니다..

먼저 이벤트 처리 함수(이벤트 핸들러 함수)로 전달될 객체에 대한 클래스를 정의합니다.. 아래는 예입니다..

하나의 이벤트 클래스에서 총 5개 종류의 이벤트를 책임지고 있습니다.. 만약 클래스 하나가 단 하나의 이벤트만을 책임진다면 생성자에서 type 인자는 필요치 않고 super를 호출할때 첫번째 인자 를 바로 값으로 지정해 주면 됩니다.

다음으로 이벤트를 발생시켜 주는 코드입니다..

이벤트가 발생되는 적절한 위치에 위의 코드가 존재하면 되며.. 위의 코드는 XRMAP_MOUSE_DOWN_EVENT라는 한 종류의 이벤트를 발생시키는 코드입니다..

이제 마크업(MXML)쪽에서 이벤트를 인식하도록 하기 위한 메타 태그의 정의를 추가합니다..

여기까지가 사용자 정의 이벤트를 추가하기 위한 전부이고.. 다음은 이 사용하는 쪽의 코드입니다.. addEventListener를 사용해 이벤트를 추가해도 되고.. 아니면 마크업쪽에서 이벤트를 추가해도 됩니다..

마크업 쪽의 방법만을 살펴보면 다음과 같습니다.. 흔히 일반적인 컴포넌트에 대한 이벤트를 정의하는 것과 동일합니다..

Tag :
2010/09/19 14:41 2010/09/19 14:41
[ActionScript] 이미지 파일을 이용해 배경 화면 채우기
화면에 대한 전체 배경을 작은 이미지를 이용해 타일로 채우는 코드입니다.. 플래시의 동적 프로그래밍 언어의 특성이 유감없이 발휘되는.... 그래서 개인적으로는 다소 이해하기 어려웠던 내용입니다.. 뭐 여튼.. 코드를 살펴보기에 앞서 사용할 작은 이미지를 살펴보고.. 바로 코드를 살펴보도록 하겠습니다..

사용자 삽입 이미지

이제 첫번째 코드입니다..
보시면.. 먼저 외부의 png 이미지 파일을 _bg_logo라는 클래스 타입으로 선언합니다.. 재밌는 액션스크립트 언어의 기능이라고 생각되는데요.. 데이터 자체를 클래스 타입으로 선언하고 재사용한다는 것.. 플래시의 태생이 멀티 미디어 저작툴이기 때문에 이런 개념을 도입한게 아닌가 싶습니다..

이렇게 선언된 클래스를 통해 바로 Bitmap 클래스 타입인 _bg_logo_bitmap 변수를 통해 생성시킵니다.. 와우!  이제 이렇게 만든 비트맵을 화면에 격자로 뿌려주는 코드는... 다음과 같습니다..

_width와 _height는 화면의 크기 정도라고 이해하시면 무리가 없습니다.. 제가 이 코드 꾸러미를 적용해서 얻은 결과 화면은 다음과 같습니다..

사용자 삽입 이미지
Tag :
2010/09/18 14:34 2010/09/18 14:34
[ActionScript] Array의 원소 추가/삭제
배열의 탈을 쓴 액션스크립트의 Array에 원소를 추가하고  삭제하는 매서드가 바로 splice라는 녀석인데.. 이 놈의 성질을 보다 명확히 파악하고 작업을 진행해야겠기에.. 정리를 해봅니다.

배열의 탈을 썼다는 의미는.. 아무리 봐도 이 Array는 배열이라고 하기 어려운 놈이라고 생각되기 때문입니다. 이 부분에 대해서는 다음 기회에 더 논하기로 하고... 이 Array에 원소를 중간에 추가하거나 중간의 원소를 삭제하는 매서드가 바로 splice입니다.

이 Array의 splice를 이용해 이떤 기능을 개발하고 있는데... 뭔가 작동이 제대로 의도하는 바대로 되지 않습니다.. Array에 대한 기본이 부족한 탓이기에 이 Array의 splice에 대해 살펴봅니다. 먼저 Array 타입의 변수에 다음과 같은 원소들이 담겨져 있다고 해 보겠습니다.

사용자 삽입 이미지
 
즉, 총 6개의 원소로 구성되어져 있으며 첫번째 원소는 배열 인덱스 0부터입니다. 이 초기 상태에서 다음과 같은 매서드를 호출하면...

결과는 다음과 같습니다..

사용자 삽입 이미지

즉, 첫번째 자리에 a 값을 추가할 수 있습니다. 그리고 다시 초기 상태로 돌아가서... 다시 다음 코드를 호출하면..

결과는 다음과 같습니다.

사용자 삽입 이미지

99번째 인자는 너무 커서 존재하지 않는 인자임에도 불구하고 인자하게도.. 가장 마지막에 a 값을 추가해 줍니다.. 그리도 또 다시 초기 상태로 돌아가서.. 다음 코드를 호출하면..

결과는 다음과 같습니다.

사용자 삽입 이미지

2번째 인덱스 바로 앞에서 a 값이 추가됩니다..

이제.. 다시 초기 상태로 돌아가서 원소를 삭제하는 다음 코드를 실행해보면..

결과는 다음과 같습니다..

사용자 삽입 이미지

정확히 지정한 2번 인덱스를 제거합니다.. 인덱스가 옳바르지 않을 경우 어떠한 에러도 발생하지 않고 원소들을 변경시키지 않습니다..

이제 정리가 끝났으니... 다시 코딩단으로......
Tag :
2010/09/13 23:13 2010/09/13 23:13
[안드로이드] 이런.... 무책임한 개발환경 같으니...

하루를 정리하고... 퇴근 직전.. 잠시 안드로이드를 공부하던 차에.. 문제가 발생했습니다.. 물론.. 모든 문제의 책임은 개발자에게 있지만... 어느 정도.. 힌트를 줘야 문제를 잡지... Error Log에 달랑 아래와 같은 에러 로그만 찍어주고.. 어디 소스 파일에 문제인지 알려주지 않으니.. 도통 나같은 안드로이드 입문자에게.. 에러 잡기는 서울서 김서방 찾기로군...

사용자 삽입 이미지

이래.. 저래.. 소스 코드며.. xml  파일이며 하나 하나, 한줄 한줄 다 뒤진 끝에.. xml에 문제가 있다는 것을 알았습니다.. 그 xml은 레이아웃을 정의하는 것이고... 다음과 같습니다..

보니.. Button인데.. Buttom이죠.. 프로젝트가 방대해지고.. 정신없이 개발하고 있다면.. 어떤 힌트가 제공하지 않는... 이런 성의없는 에러로그로는 정말 당혹스러워질법도 한데요..

이런 상황을 대비해서.. 다시금 에러로그를 살펴봅니다.. org.eclipse.jdt.ui에 Internal Error는.. ui를.. 즉, 레이아웃을 정의하는 기능 내부의 에러라는 의미이고... 그 하단에 딸린 추가 로그 정보인 gen [in tstAndroid] does not exist는.. 무언가 존재하지 않는다는 의미라고 생각할 수 있겠는데요.. 바로 실수로 입력한 Buttom에 대한 ui가 존재하지 않는다는 생각할 수 있겠습니다..

이런 경우에는..... 레이아웃을 정의하는 xml에 태그명이 잘못되었으니.. 이곳에서서 문제를 찾아볼것! 이라고 정리해봅니다.. 아이코...... 벌써.. 11시가 넘었습니다.. 퇴근해야죠...... 내일을 위해서...

Tag :
2010/09/13 19:55 2010/09/13 19:55
ftp 명령어 사용예
2010/09/10 12:36 2010/09/10 12:36
[ActionScript] Event 클래스의 target과 currentTarget 속성

플래시의 기능을 최대한 할용하고는 있지만... 플래시가 자동으로 처리해주는 것보다는... 퍼포먼스 향상을 목표로 부하를 최소화하기 위해.. 수동으로 처리해주는 기능들이 있습니다..

예를 들어서 Sprite 클래스가 가지고 있는 자식들 각각에 대해 클릭 이벤트를 받아 오기 위해.. 각 자식들에 대해 마우스 이벤트를 등록(addEventListener)를 하지 않고... 부모 Sprite에만 마우스 이벤트를 등록해 놓고.. 이 부모의 이벤트에서 자식들의 클릭 여부(hitTestPoint 매서드를 사용)를 가려내고자 함입니다..

이때... 클릭한 지점에 대한 좌표가 여러 모로 혼란스럽습니다... 플래시 자체가 DisplayObject라는 레이어로 첩첩히 쌓여져 있어서... 말입니다.. 여담이지만.. GIS의 지도 레이어 개념과 플래시의 DisplayObject의 대응은 마치 플래시를 맵엔진을 위해 만들어지 개발환경이 아닌가할 정도로... 뛰어납니다...

다시 본론으로 돌아와서... 부모 Sprite에서 받은 마우스 클릭 위치에 대해서 자식 Sprite의 hit 여부를 알아내기 위해서는 마우스 이벤트의 인자인 Event 클래스의 target를 제대로 이해하고 있어야 합니다.. target와 함께 currentTarget 속성이 존재하는데.. 간단히 정리하면 다음과 같습니다..

  • target : 이벤트를 dispatch한 객체
  • currentTarget : 이벤트 핸들러 함수가 등록된 객체

다음 코드는 진행중인 플래시 기반의 맵엔진의 코드중.. 이와 관련된 부분입니다..

보시면... 위의 mouseClick 매서드는 이벤트가 아닙니다.. 단지 mouseDown과 mouseUp 이벤트를 조합해서 클릭 여부에 대해 형성된 이벤트 성격의 매서드입니다.. 여튼.. 이벤트라고 생각하셔도 무방합니다..

이 mouseClick 매서드는 부모 Sprite의 소유입니다.. 즉, 달리 말해 부모 Sprite에 등록된 이벤트입니다. 이때 받은 e 매개변수에 localX과 localY 좌표는 클릭된 위치이고... 클릭된 위치는.. 부모 Sprite일수도 있고... 자식 Sprite일수도 있습니다.. 즉, 이 이벤트가 등록된 부모에 대한 좌표가 아니라는 점입니다..

문제는 Sprite의 hitTestPoint가 받는 x, y 좌표입니다.. 받는 x, y 좌표는 부모 Sprite의 좌표여야 하는데.. e를 통해 넘어온 좌표는 부모의 좌표일수도.. 자식의 좌표일 수도 있다는 점입니다.. 이를 부모의 좌표로 통일해줘야 하는데.. 그 방법이 바로 8번 코드의 target를 속성을 사용하는 것입니다.

플래시의 DisplayObject의 개념과 target 속성에 대한 기본적인 부분을 알면 매우 당연한 내용이겠지만.... 저처럼.. 플래시에 대한 개념이 얕은 사람은.. 매우 혼돈스러운 부분이 아닐까 싶습니다..

Tag :
2010/09/07 16:13 2010/09/07 16:13
[안드로이드] SD 카드에 파일 생성
안드로이드는 보안상의 이유로 모바일 디바이스의 내장 메모리를 통한 파일을 여러개의 어플리케이션에서 공유하는 것이 여러모로 불편하게 되어 있습니다. 하지만 외장 메모리인 SD 카드의 경우는 이러한 제약이 존재하지 않습니다. 이 글은 안드로이드에서 SD 카드에 파일을 생성하는 것에 대한 정리입니다.

먼저 안드로이드에 SD 카드의 사용 가능 여부를 판단하기 위한 코드는 아래와 같습니다.

showMsg는 안드로이드의 Toast 기능을 좀더 쉽게 사용하기 위한 사용자 정의 매서드로써 아래와 같습니다.

Toast는 디바이스 화면에 일정 시간 동안 메세지를 띠워주는 기능입니다. 다시 본론으로 돌아가서.. 정적 클래스인 Environment의 getExternalStorageState 매서드의 반환값이 Environment.MEDIA_MOUNTED 인 경우가 SD 카드를 사용할 수 있다는 의미이고 사용 가능하다면 SD 카드가 마운트된 디렉토리 명을 얻기 위해 다시 Environment의 getExternalStorageDirectory 매서드를 사용합니다. 이렇게 얻은 디렉토리에는 보안상의 제약 없이 자유롭게 파일을 읽고 쓸 수 있습니다. 여기서는 파일을 쓰는 코드에 대해 살펴보겠습니다.

안드로이드는 자바 언어를 통해 플랫폼의 API를 사용할 수 있습니다. 이런 맥락으로 SD 카드에 파일을 생성하고 읽고, 쓰기는 자바의 API를 그대로 사용할 수 있습니다.

끝으로 SD 카드를 사용하기 위해서는 매니페스트 파일에 다음과 같은 설정값을 추가해줘야 합니다.

이 설정값이 없다고 해도 SD 카드를 사용할 수 있다고 나오지만 실제로 파일을 쓰거나 읽을 수 없으니.. 반드시 이 설정값을 추가하기 바랍니다.
Tag :
2010/09/01 19:13 2010/09/01 19:13
[안드로이드] 사용자 정의 Adapter 만들기

Adapter는 데이터 테이블을 목록 형태로 보여주기 위해 사용되는 것으로 데이터를 다양한 형식의 리스트 형식으로 보여주기 위해서 데이터와 리스트 뷰 사이에 존재하는 객체입니다. 즉, 간단히 말해 데이터와 리스트 뷰 사이의 통신을 위한 다리 역활을 합니다.

안드로이드를 살펴보면서.. 데이터를 사용자 정의 리스트뷰 형식으로 표현하는데 있어서 매우 유연한 방식을 제공한다는 것을 알게 되었고... 이런 유연함을 위해 다소 복잡한 구조에 익숙해져 볼 생각으로 이 글을 작성하게 되었습니다.

안드로이드를 처음 접하시는 분들에게 상당히 불친절한 내용이라고 생각됩니다. 제 개인적으로는 정리 차원의 글이라는 점을 다시금 언급해 드립니다.

먼저 아래와 같은 결과를 목표로 해서 사용자 정의 Adapter 만들기에 대한 핵심 내용을 정리해 보겠습니다.

사용자 삽입 이미지

인물에 대한 사진과 이름 그리고 생일 정보를 리스트 형식으로 보여주고 있는 화면입니다. 위의 화면에 대한 레이아웃은 다음과 같습니다.

사용자 삽입 이미지

즉.. Activity의 View Content가 profilelistview.xml에 해당되며 리스트뷰를 채우는 각 항목은 profileview.xml로 정의된다는 내용입니다. 먼저 큰 레이아웃인 profilelistview.xml에 대한 코드는 다음과 같습니다.

단순히 레이아웃 안에 list라는 id의 ListView 위젯만을 가지고 있습니다. 그리고 다음 코드는 이 ListView 위젯 안에 담을 항목에 대한 뷰에 해당하는 profileview.xml입니다.

위의 코드를 도식화 하면 아래와 같습니다.

사용자 삽입 이미지

수평 정렬로 지정된 레이아웃 안에 ImageView 위젯과 TextView 위젯 2개를 가지고 있는 수직 정렬로 지정된 레이아웃에 대한 내용입니다. 이제 이렇게 UI가 정해졌으니 코드에 대해서 정리해 보겠습니다.

먼저 리스트 뷰를 채울 데이터를 나타낼 클래스인 Profile에 대한 코드입니다.

사진에 대한 리소스 ID값과 이름 그리고 전화번호에 대한 값을 저장하고 얻기 위한 단순한 클래스입니다.

다음으로 뷰를 화면에 표시하기 위한 Activity 클래스를 상속받은 ProfileList 클래스 입니다.

2번 코드의 _profiles는 데이터 목록을 담고 있는 컨테이너입니다. 이 컨테이너에 데이터를 추가하는 코드가 8~22번입니다. 이 컨테이너의 데이터가 바로 리스트 뷰에 표시될 정보입니다. 이 데이터와 리스트 뷰를 연결해주기 위한 것이 바로... 24번 코드, 즉.. 이 글의 주제인 사용자 정의 Adapter인 ProfileListAdapter 입니다. 이 사용자 정의 Adapter 클래스는 BaseAdapter를 상속받습니다. 코드는 아래와 같습니다.

중요한 부분만 언급하면... Override해야할 매서드는 모두 4개로써 getCount, getItem, getItemId, getView입니다. 그리고 리스트 뷰의 항목에 대한 뷰를 생성하는 getView는 처음 호출될때 두번째 인자인 convertView가 null이며 이후 개발자가 직접 인스턴스를 생성해주면 이후 호출될때는 처음 호출될때 생성된 인스턴스가 전달되는 구조로써 인스턴스의 생성에 대한 부담을 최소화하기 위한 방안입니다.

이미 안드로이드의 사용자 정의 Adapter 만들기에 대한 내용은 여타의 다양한 개발 플랫폼에서도 사용되고 있는 구조이지만... 안드로이드를 통해 다시금 접해 봄으로써.. 이러한 구조에 익숙해져서 자신이 개발하고 있는 소프트웨어에 그 설계 구조 자체를 적용해 볼 수 있는 발전으로까지 이어가길 스스로에게 다짐해 봅니다.

Tag :
BLOG main image
 Notice
DuraMap-Xr 소개 및 다운로드
[오픈소스] SimpleSHP v0.1
FingerEyes-Xr 소개 및 다운로드
OpenGL Tutorials
 Category
전체 (531)
GIS 개발 (146)
프로그래밍 (233)
스치는 생각들 (129)
번역 또는 집필 (3)
 TAGS
GIS Xr OpenGL Shader FingerEyes BlackPoint Algorithm Java Map Engine WPF
 Calendar
«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
 Recent Entries
[FingerEyes] 지오메트리...
[FingerEyes] Geometry로...
[FingerEyes] FID 리스트...
[FingerEyes] UPDATE, INS...
영화, "부러진 화살"
 Recent Comments
소스코드 그대로 써보아도...
인현환 - 13:50
글의 예제 코드의 숫자들...
김형준 - 12:57
안녕하세요. 포스트 잘 보...
인현환 - 11:15
메일로 답변드렸습니다....
김형준 - 02/01
txt파일을 엑셀로 변환하...
최상준 - 02/01
코봉히님두 새해 복 많이...
김형준 - 01/25
아 너무 감사합니다. 새해...
코봉히 - 01/23
wkb는 http://www.gisdeve...
김형준(Dip2K) - 01/23
wkb의 구조가 shp파일의...
코봉히 - 01/20
wkb는 바이너리인지라.....
김형준(Dip2K) - 01/20
 Archive
2012/02
2012/01
2011/12
2011/11
2011/10
2011/09
2011/08
2011/07
2011/06
2011/05
2011/04
2011/03
 Link Site
Adobe Flex 3 Help
Cartograph 2.0
GADM
GIS 위키디피아
GIS 프로그래밍 연구소
MapTools.org
OGC
OGRE3D
OSGeo 한국 지부
Paul Bourke Site
Wikipedia
국가수자원관리 정보시스템
국립지리원
국토연구원
국토해양부
네이버 과학
대한측량협회
류광님의 블로그
이민파님의 공간분석과 리...
지오서비스(GeoService)
 Visitor Statistics
Total : 929882
Today : 533
Yesterday : 511
태터툴즈 배너
rss