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);
}