なお、タップ/フリックのジェスチャーの実装方法やタッチ/フリックジェスチャーとピンチジェスチャーを同時実装する方法は以下の記事を御覧ください。
=== 目次 ===
ピンチ(拡大/縮小)のジェスチャーを実装する方法
ピンチ(拡大/縮小)のジェスチャーを実装するにはActivityにScaleGestureDetector.OnScaleGestureListenerを実装し、各種ジェスチャーに対応したメソッドをoverrideします。以下サンプルコードです。
public class GestureTestActivity extends AppCompatActivity implements ScaleGestureDetector.OnScaleGestureListener {
ScaleGestureDetector mScaleDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_test);
mScaleDetector = new ScaleGestureDetector(this, this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return mScaleDetector.onTouchEvent(event);
}
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
//ピンチ動作中
Log.d("MY_LOG_TAG", "onScale");
if(scaleGestureDetector.getScaleFactor() > 1) {
//拡大動作
Log.d("MY_LOG_TAG", "拡大");
} else {
//縮小動作
Log.d("MY_LOG_TAG", "縮小");
}
return true;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
//ピンチ動作開始
Log.d("MY_LOG_TAG", "onScaleBegin");
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {
//ピンチ動作終了
Log.d("MY_LOG_TAG", "onScaleEnd");
}
}
サンプルコードの解説
サンプルコードを解説していきます。ジェスチャーオブジェクトを取得する。
まずはジェスチャーオブジェクトを取得します。 ScaleGestureDetector mScaleDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_test);
mScaleDetector = new ScaleGestureDetector(this, this);
}
ジェスチャーオブジェクトへタッチイベントを渡す
さきほど取得したジェスチャーオブジェクトに対してタッチイベントを渡してあげます。 @Override
public boolean onTouchEvent(MotionEvent event) {
return mScaleDetector.onTouchEvent(event);
}
各種ジェスチャーの動作を定義する
この後は各種ジェスチャーの動作を定義するだけです。たとえば以下はonScaleEndというピンチ動作終了時にコールされるメソッドです。
@Override
public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {
//ピンチ動作終了
Log.d("MY_LOG_TAG", "onScaleEnd");
}
拡大 or 縮小を判定する
拡大 or 縮小を判定するにはピンチ中のジェスチャーであるonScaleメソッド内でgetScaleFactorでその拡大比率を取得すればOKです。以下、サンプルコードです。
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
//ピンチ動作中
Log.d("MY_LOG_TAG", "onScale");
if(scaleGestureDetector.getScaleFactor() > 1) {
//拡大動作
Log.d("MY_LOG_TAG", "拡大");
} else {
//縮小動作
Log.d("MY_LOG_TAG", "縮小");
}
return true;
}
まとめ
Androidアプリ開発において、ピンチ(拡大/縮小)のジェスチャーを実装する方法を紹介しました。なお、タップ/フリックのジェスチャーの実装方法やタッチ/フリックジェスチャーとピンチジェスチャーを同時実装する方法は以下の記事を御覧ください。