GestureDetectorの処理¶
GestureDetector提供する内部クラスSimpleOnGestureListenerを継承する
インメージのジェスチャー処理
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 | /** * @param e1 ジェスチャー出発点の移動事件 * @param e2 目前ジェスチャー点的移動事件 * @param velocityX 毎秒X方向の移動スピード * @param velocityY 毎秒Y方向の移動スピード * @return */ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { updatePageButton(); onClearButtonFocus(); float newWidth = imageViewShow.getFirstShowedBitmapWidth() * imageViewShow.getScale(); if (newWidth <= widget.getWidth()) { //移動距離が100より多くかどうかを判断する if (e1.getX() - e2.getX() > 100) { if (currentPosition == pages.size() - 1) { return false; } onButtonChangedPage(R.id.buttonNext); } else if (e1.getX() - e2.getX() < -100) { if (currentPosition == 0) { return false; } onButtonChangedPage(R.id.buttonPrevious); } else { return false; } } return super.onFling(e1, e2, velocityX, velocityY); } |
onDoubleTap方法を実現する,操作をダブルクリックすることを実現します
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Override public boolean onDoubleTap(MotionEvent e){ if(imageViewShow.getScale()>2F){ oldScale=1.0f; newScale=1.0f; imageViewShow.zoomTo(1f); }else{ oldScale=3.0f; newScale=3.0f; imageViewShow.zoomToPoint(3f,e.getX(),e.getY()); } return true; } |
onSingleTapConfirmed方法を実現する
1 2 3 4 5 | @Override public boolean onSingleTapConfirmed(MotionEvent e){ showOnScreenControls(); return true; } |
- スクリーンでクリックすることは二つ種類がある。タップ時間はプログラムの流れを決める。 時間長さ onDown--------》onShowPress------》onSingleTapUp--------》onSingleTapConfirmed 時間短さ onDown--------》onSingleTapUp--------》onSingleTapConfirmed
- ロングタップ onDown--------》onShowPress------》onLongPress
- スクリンをタップして、少し滑りてスクリンから離れる onDown-----》onScroll----》onScroll----》onScroll----》………----->onFling
- トラッグ onDown------》onScroll----》onScroll------》onFiling
onDownメソッドを実現する(タップダウンの時このメソッドを触発する)
1 2 3 4 5 | @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return super.onDown(e); } |
onSingleTapUpメソッドを実現する(タップダウン後スクロールしないで、そしてロングタップしないで、そのままスクリンから離れる)
1 2 3 4 5 | @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return super.onSingleTapUp(e); } |
onShowPressメソッドを実現する(スクリンをタップして、スクロールしない時このメソッドを触発する)
1 2 3 4 5 | @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub super.onShowPress(e); } |
onLongPress方法を実現する(ロングタップ場合このメソッドを触発する)
1 2 3 4 5 | @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub super.onLongPress(e); } |
onScroll方法を実現する(スクロール場合このメソッドを触発する)
1 2 3 4 5 6 7 | @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (imageViewShow.getScale() > 1F) { imageViewShow.postTranslateCenter(-distanceX, -distanceY); } return true; } |
onDoubleTapEvent方法を実現する(ダブルクリックの二回目タップダウンまたは二回目タップアップの場合このメソッドを触発する。getAction()メソッドで具体的な動作を区別できる)
1 2 3 4 5 | @Override public boolean onDoubleTapEvent(MotionEvent e) { // TODO Auto-generated method stub return super.onDoubleTapEvent(e); } |