Как «перезапустить» сенсорное событие в Android? - PullRequest
2 голосов
/ 02 августа 2011

У меня есть пользовательский View, и я переопределяю onTouchEvent(MotionEvent). Я реализовал пинч-зум в этом представлении, как описано в статье Осмысление Multitouch . Проблема, с которой я столкнулся, заключается в том, что это представление в конечном итоге используется в Gallery, для прокрутки которого нужны события касания. Я добавил логику, чтобы определять, когда мой вид полностью прокручивается вправо / влево и возвращает ложь, но я думаю, что Gallery требуется полное движение MotionEvent для прокрутки. Вот где я возвращаю false:

case MotionEvent.ACTION_MOVE: {
    final int pointerIndex = event.findPointerIndex( getActivePointerId() );
    final float x = event.getX( pointerIndex );
    final float y = event.getY( pointerIndex );

    // Only move if the ScaleGestureDetector isn't processing a gesture.
    if ( !getScaleDetector().isInProgress() ) {
        if ( isDetectMovementX() ) {
            final float dx = x - getLastTouchX();
            setPosX( getPosX() + dx );
        }

        if ( isDetectMovementY() ) {
            final float dy = y - getLastTouchY();
            setPosY( getPosY() + dy );
        }

        invalidate();
    }

    setLastTouchX( x );
    setLastTouchY( y );

    if ( isAtXBound() ) {
        return false;
    }

    break;
}

View увеличивает и переводит, но Gallery никогда не прокручивается. Мне интересно, есть ли способ в принципе повторно отправить MotionEvent как «свежий» MotionEvent с начальным действием, равным ACTION_DOWN. Спасибо!

1 Ответ

1 голос
/ 02 августа 2011

Вы можете использовать конструктор MotionEvent для создания нового.См. Статью Android: как создать MotionEvent?

Также метод obtain(...) создает новый MotionEvent.Попробуйте MotionEvent e = MotionEvent.obtain(event);

См. эту ссылку , чтобы узнать больше о obtain.

...