본문 바로가기

[ 프로그래밍 ]/안드로이드(Android)

Android 2.2(프로요)에서 달라진 점.

안드로이드 앱 프로그램 개발은 난관의 연속이다. 산넘어 산이다. 하루하루 고민하고 몰두해야지만 풀리는 난제들 투성이다.
스크롤 뷰가 세로방향으로만 지원이 된다는 것을 모르고 엄청난 삽질을 하고 나서야 HorizontalScrollview가 따로 존재한다는 사실을 알게 된 그저께, 안드로이드 AVD에서는 멀티터치 기능을 테스트 할 수 없다는 사실을 알게 된 어제, 안드로이드 폰 중 멀티터치가 가능한 폰이 몇 개 없다는 사실을 알게 된 오늘 까지... 급한마음에 갤럭시S 사용자를 찾아가서 테스트 해보니 기본맵은 핀치줌으로 확대/축소 되는 것을 확인했고 몇몇 정전식 폰에서 멀티터치 구현은 가능한것으로 보여지는데 - 비록 직접 루틴을 짜야 하겠지만 - 개발을 위해 멀티터치 테스트를 해 볼 여지는 있겠다 싶던 와중에 다행스러운 소식을 접하게 되었다.


  • New ScaleGestureDetector that lets Views detect and handle transformation gestures that involve more than one pointer (multitouch) using the supplied MotionEvents.
  • Improvements in the way that multitouch events are reported in MotionEvent objects.

  • 2.2 프로요 부터는 ScaleGestureDetector가 멀티터치에 대한 변환제스쳐를 처리할 수 있다는 이야기인데, 그 세부 내용을 보면 아래와 같다.

    Class Overview

    Detects transformation gestures involving more than one pointer ("multitouch") using the supplied MotionEvents. The ScaleGestureDetector.OnScaleGestureListener callback will notify users when a particular gesture event has occurred. This class should only be used with MotionEvents reported via touch. To use this class:


    멀티터치 제스쳐를 콜백함수를 통해 알려주는데, ScaleGestureDetector의 인스턴스를 뷰에다가 생성하고 onTouchEvent에서 받아서 사용할 수 있게 되어있다.

    주요 메소드는 아래와 같다.
    public float getCurrentSpan () - 터치 된 두 포인트 사이의 거리
    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 클래스를 사용할 수는 없지만 - 다행스러운 동영상인지도 모르겠다.