Android SimpleOnGestureListener. onFling получает нулевое значение MotionEvent

Вы можете использовать npm-prune для удаления посторонних пакетов.

npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]

Эта команда удаляет «посторонние» пакеты. Если указано имя пакета, удаляются только пакеты, соответствующие одному из предоставленных имен.

Посторонние пакеты - это пакеты, которые не перечислены в списке зависимостей родительского пакета.

Если указан флаг - production или для переменной среды NODE_ENV установлено значение production , эта команда удалит пакеты, указанные в . ] devDependencies . Установка - без производства будет отменять NODE_ENV , установленный на производство .

Если используется флаг - всухую , то никаких изменений фактически не будет.

Если используется флаг - json , то изменения npm prune , сделанные (или сделанные с - всухую ), будут напечатаны как объект JSON.

При нормальной работе с включенными блокировками пакетов посторонние модули автоматически удаляются при установке модулей, и вам понадобится только эта команда с флагом - production . ​​

Если вы отключили блокировки пакетов, посторонние модули не будут удалены, и вы можете время от времени запускать npm prune для их удаления.

Используйте npm-dedupe для уменьшения дублирования.

npm dedupe
npm ddp

Выполняет поиск в локальном дереве пакетов и пытается упростить общую структуру, перемещая зависимости дальше вверх по дереву, где они могут более эффективно использоваться несколькими зависимыми пакетами. .

Например, рассмотрим этот график зависимости:

a
+-- b <-- depends on c@1.0.x
|    `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
     `-- c@1.0.10

В этом случае npm-dedupe преобразует дерево в:

 a
 +-- b
 +-- d
 `-- c@1.0.10

Из-за иерархическая природа поиска модулей узла, b и d, получит свою зависимость, встречаемую одним пакетом c на корневом уровне дерева.

Алгоритм дедупликации обходит дерево, перемещая каждую зависимость как можно выше в дереве, даже если дубликаты не найдены. Это приведет как к плоскому, так и к дедуплицированному дереву.

17
задан mcrumley 11 November 2010 в 04:35
поделиться

2 ответа

У меня та же проблема с пользовательским представлением и OnGestureListener onFling. Выяснили это:

Независимо от того, используете ли вы GestureDetector.SimpleOnGestureListener, вы всегда должны реализовывать метод onDown (), который возвращает true.

Источник: http://developer.android.com/training/custom-views/making-interactive.html

5
ответ дан 30 November 2019 в 13:11
поделиться

Я впервые столкнулся с этой проблемой с Android 4.0, так как мой код работает нормально во всех предыдущих версиях. Получив подсказку из приведенных здесь предложений, я нашел простой обходной путь - просто отслеживать событие onDown и использовать его вместо первого параметра onFling в случае, если оно окажется нулевым.

public class MySimpleGestureListener extends SimpleOnGestureListener {
    protected MotionEvent mLastOnDownEvent = null;

    @Override
    public boolean onDown(MotionEvent e) {
        mLastOnDownEvent = e;
        return true;//super.onDown(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if (e1==null)
            e1 = mLastOnDownEvent;
        if (e1==null || e2==null)
            return false;
        float dX = e2.getX()-e1.getX();
        float dY = e2.getY()-e1.getY();
        ...rest of code
    }

    ...rest of class
}
13
ответ дан 30 November 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: