4

Android作業中のアプリで 2 本指タップを検出する必要があります。また、タップ、ダブルタップ、長押し、スケーリングを検出するためにScaleGestureDetectorandを使用しています。GestureDetector

私のonTouchEvent方法では:

@Override
public boolean onTouchEvent(MotionEvent event) {
    scaleGestureDetector.onTouchEvent(event);
    gestureDetector.onTouchEvent(event);

    switch (event.getActionMasked()) {
    case MotionEvent.ACTION_DOWN:
        activePointerId = event.getPointerId(0);
        break;
    .
    .
    .
    case MotionEvent.ACTION_POINTER_UP:
        int pointerId = event.getPointerId(event.getActionIndex());

        if (pointerId == activePointerId) {
            // change active pointer
        } else if (!scaleDetector.isInProgress() && (event.getPointerCount() == 2)) {
            // handle two-finger tap
        }
        break;
    .
    .
    .

問題は、スケールも 2 本指のタップとして検出されることです。この問題を解決するためのアイデアはありますか? ありがとう!

4

2 に答える 2

2

私も以前にそのような問題に遭遇したことがあります。最後に、GestureDetector を拡張する独自のクラスを作成する必要がありました。自分でスケールを実装できます。

于 2012-09-05T03:24:51.647 に答える
0
private int tap_count=0;
    @Override
        public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction() & MotionEvent.ACTION_MASK;
        switch(action) {

            case MotionEvent.ACTION_DOWN : {

                ++tap_count;
                Log.d(LOG_TAG, "MotionEvent.ACTION_DOWN "+tap_count);
                break;
            }

            case MotionEvent.ACTION_MOVE : {
                break;
            }

            case MotionEvent.ACTION_POINTER_DOWN : {

                ++tap_count;
                Log.d(LOG_TAG, "MotionEvent.ACTION_POINTER_DOWN "+tap_count);
                break;
            }

            case MotionEvent.ACTION_POINTER_UP : {

                ++tap_count;
                Log.d(LOG_TAG, "MotionEvent.ACTION_POINTER_UP "+tap_count);
                break;
            }

            case MotionEvent.ACTION_UP : {

                --tap_count;
                Log.d(LOG_TAG, "MotionEvent.ACTION_UP "+tap_count);

                if(tap_count == 2){
                    tap_count = 0;
                    Toast.makeText(mContext,"Enableing Accessbility",Toast.LENGTH_SHORT).show();
                    return true;
                }
                break;
            }
        }
        return true;
        }
于 2017-04-12T06:51:29.583 に答える