C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

Android2.0(API 5)以降でマルチタッチ(Multi-touch)がサポートされた. (マルチタッチイベントを取得する参照)
そして, Android2.2(API 8)からは, マルチタッチの特徴的な操作であるピンチイン・アウトをモーションジェスチャー(ScaleGestureDetector)クラスで簡単に認識できるようになった.

ピンチイン・アウトを認識

    • ScaleGestureDetectorクラスのインスタンスを生成する. インスタンスを生成する際に, SimpleOnScaleGestureListenerメソッドを登録する.
    • onTouchEventメソッドをオーバーライドし, タッチイベントをScaleGestureDetector#onTouchEvenetメソッドに渡す.
    • SimpleOnScaleGestureListenerクラスのインスタンスを生成する.
    • onScaleGestureListenerにおいて, 各イベントを処理するメソッドをオーバーライドする.
package com.moonlight_aska.android.multitouch02;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener;

public class MultiTouch02 extends Activity {
  private ScaleGestureDetector gesDetect = null;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // ScaleGestureDetecotorクラスのインスタンス生成
    gesDetect = new ScaleGestureDetector(this, onScaleGestureListener);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    // タッチイベントをScaleGestureDetector#onTouchEventメソッドに
    gesDetect.onTouchEvent(event);
    return false;
  }

  // スケールジェスチャーイベントを取得
  private final SimpleOnScaleGestureListener onScaleGestureListener = new SimpleOnScaleGestureListener(){
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
      // TODO Auto-generated method stub
      Log.v("ScaleGesture", "onScale");
      return super.onScale(detector);
    }

    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
      // TODO Auto-generated method stub
      Log.v("ScaleGesture", "onScaleBegin");
      return super.onScaleBegin(detector);
    }

    @Override
    public void onScaleEnd(ScaleGestureDetector detector) {
      // TODO Auto-generated method stub
      Log.v("ScaleGesture", "onScaleEnd");
      super.onScaleEnd(detector);
    }
  };
}

イベント発生

SHARP SH-03Cで試すと, ピンチイン・アウトの操作で, 以下の順にイベントが発生した.
 onScaleBegin -> onScale * n -> onScaleEnd

    • onScaleBeginイベント
    複数のタッチを検出した際に, onScaleBeginが発生する. 
    更に, 複数タッチした状態で, 新たにタッチしてもonScaleBeginが発生する.
    • onScaleイベント
    複数タッチした状態で, タッチ位置に変化があった場合にonScaleが発生する.
    • onScaleEndイベント
    複数タッチした状態で, 1つでもタッチアップするとonScaleEndが発生する.
    onScaleEndが発生した後, 更に複数のタッチが残っていてもonScaleは発生しない.
    (例えば, 3本タッチしていて, 1本タッチアップする.)




コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

AD



管理人のみ編集できます