안드로이드 앱 프로그램 개발은 난관의 연속이다. 산넘어 산이다. 하루하루 고민하고 몰두해야지만 풀리는 난제들 투성이다.
스크롤 뷰가 세로방향으로만 지원이 된다는 것을 모르고 엄청난 삽질을 하고 나서야 HorizontalScrollview가 따로 존재한다는 사실을 알게 된 그저께, 안드로이드 AVD에서는 멀티터치 기능을 테스트 할 수 없다는 사실을 알게 된 어제, 안드로이드 폰 중 멀티터치가 가능한 폰이 몇 개 없다는 사실을 알게 된 오늘 까지... 급한마음에 갤럭시S 사용자를 찾아가서 테스트 해보니 기본맵은 핀치줌으로 확대/축소 되는 것을 확인했고 몇몇 정전식 폰에서 멀티터치 구현은 가능한것으로 보여지는데 - 비록 직접 루틴을 짜야 하겠지만 - 개발을 위해 멀티터치 테스트를 해 볼 여지는 있겠다 싶던 와중에 다행스러운 소식을 접하게 되었다.
New
Improvements in the way that multitouch events are reported in
2.2 프로요 부터는 ScaleGestureDetector가 멀티터치에 대한 변환제스쳐를 처리할 수 있다는 이야기인데, 그 세부 내용을 보면 아래와 같다.
멀티터치 제스쳐를 콜백함수를 통해 알려주는데, ScaleGestureDetector의 인스턴스를 뷰에다가 생성하고 onTouchEvent에서 받아서 사용할 수 있게 되어있다.
주요 메소드는 아래와 같다.
기존 버전에서 각각 포인트의 id를 얻어 각 포인트의 거리를 구하는 노가다 작업에서는 조금 해방된 느낌이다.
앞서 말한 바와 같이 장비별로 멀티터치가 지원 되는 폰, 안되는 폰, 지원이 되지만 불안한 폰 등 여러 경우의 수가 발생할 수 있는데 public abstract boolean hasSystemFeature (String name) 를 통해서 현재 장비가 멀티터치가 가능한 장비인지 알 수 있다. name 부에는 FEATURE_로 시작하는 상수들이 들어가는데, 주요 상수의 종류로 FEATURE_BLUETOOTH, FEATURE_CAMERA, FEATURE_CAMERA_AUTOFOCUS, FEATURE_CAMERA_FLASH, FEATURE_LOCATION_GPS, FEATURE_MICROPHONE, FEATURE_SENSOR_COMPASS, FEATURE_TELEPHONY_CDMA, FEATURE_TOUCHSCREEN, FEATURE_TOUCHSCREEN_MULTITOUCH, FEATURE_WIFI - 이름만 봐도 내용을 알겠다. - 등이 있다.
아래는 HTC와 갤럭시S의 멀티터치 테스트 비교 동영상이다. 관련이 있어 보여서 영상을 첨부한다.
스크롤 뷰가 세로방향으로만 지원이 된다는 것을 모르고 엄청난 삽질을 하고 나서야 HorizontalScrollview가 따로 존재한다는 사실을 알게 된 그저께, 안드로이드 AVD에서는 멀티터치 기능을 테스트 할 수 없다는 사실을 알게 된 어제, 안드로이드 폰 중 멀티터치가 가능한 폰이 몇 개 없다는 사실을 알게 된 오늘 까지... 급한마음에 갤럭시S 사용자를 찾아가서 테스트 해보니 기본맵은 핀치줌으로 확대/축소 되는 것을 확인했고 몇몇 정전식 폰에서 멀티터치 구현은 가능한것으로 보여지는데 - 비록 직접 루틴을 짜야 하겠지만 - 개발을 위해 멀티터치 테스트를 해 볼 여지는 있겠다 싶던 와중에 다행스러운 소식을 접하게 되었다.
ScaleGestureDetector
that lets Views detect and handle transformation gestures that involve more than one pointer (multitouch) using the supplied MotionEvents. MotionEvent
objects.2.2 프로요 부터는 ScaleGestureDetector가 멀티터치에 대한 변환제스쳐를 처리할 수 있다는 이야기인데, 그 세부 내용을 보면 아래와 같다.
Class Overview
Detects transformation gestures involving more than one pointer ("multitouch") using the supplied MotionEvent
s. The ScaleGestureDetector.OnScaleGestureListener
callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvent
s reported via touch. To use this class:
- Create an instance of the
ScaleGestureDetector
for yourView
- In the
onTouchEvent(MotionEvent)
method ensure you callonTouchEvent(MotionEvent)
. The methods defined in your callback will be executed when the events occur.
멀티터치 제스쳐를 콜백함수를 통해 알려주는데, ScaleGestureDetector의 인스턴스를 뷰에다가 생성하고 onTouchEvent에서 받아서 사용할 수 있게 되어있다.
주요 메소드는 아래와 같다.
public float getCurrentSpan () - 터치 된 두 포인트 사이의 거리
public float getPreviousSpan () - 제스처가 일어나기 이전의 두 포인트 사이 거리
public float getScaleFactor () - CurrentSpan / PreviousSpan
public float getPreviousSpan () - 제스처가 일어나기 이전의 두 포인트 사이 거리
public float getScaleFactor () - CurrentSpan / PreviousSpan
기존 버전에서 각각 포인트의 id를 얻어 각 포인트의 거리를 구하는 노가다 작업에서는 조금 해방된 느낌이다.
앞서 말한 바와 같이 장비별로 멀티터치가 지원 되는 폰, 안되는 폰, 지원이 되지만 불안한 폰 등 여러 경우의 수가 발생할 수 있는데 public abstract boolean hasSystemFeature (String name) 를 통해서 현재 장비가 멀티터치가 가능한 장비인지 알 수 있다. name 부에는 FEATURE_로 시작하는 상수들이 들어가는데, 주요 상수의 종류로 FEATURE_BLUETOOTH, FEATURE_CAMERA, FEATURE_CAMERA_AUTOFOCUS, FEATURE_CAMERA_FLASH, FEATURE_LOCATION_GPS, FEATURE_MICROPHONE, FEATURE_SENSOR_COMPASS, FEATURE_TELEPHONY_CDMA, FEATURE_TOUCHSCREEN, FEATURE_TOUCHSCREEN_MULTITOUCH, FEATURE_WIFI - 이름만 봐도 내용을 알겠다. - 등이 있다.
아래는 HTC와 갤럭시S의 멀티터치 테스트 비교 동영상이다. 관련이 있어 보여서 영상을 첨부한다.
갤럭시 A, S를 타겟으로 앱을 만들고 있는 나에게는 - 비록 당장 ScaleGestureDetector 클래스를 사용할 수는 없지만 - 다행스러운 동영상인지도 모르겠다.
'[ 프로그래밍 ] > 안드로이드(Android)' 카테고리의 다른 글
이제 안드로이드 마켓에서 유료 애플리케이션을 구매하세요! (5) | 2010.08.02 |
---|---|
안드로이드 애플리케이션 라이센스 서비스 도입 (0) | 2010.07.28 |
안드로이드(Android)로 성공하기 (2) | 2010.07.21 |
안드로이드 예제 무작정 따라하기 Part.VII (0) | 2010.07.16 |
안드로이드 예제 무작정 따라하기 Part.VI (0) | 2010.07.12 |