0

在我们的 android 程序中,我们无法在正确的时间调用方法。我们有一个 ontouchlistener,我们试图在发布时调用它,这意味着其他函数会继续它。但是,似乎“ontouch”中的所有内容都同时发生。我们如何在其他方法完成后调用其他方法?

@Override
public boolean onTouch(View v, MotionEvent event) {

    Tile touchedTile = (Tile) v;
    if (touchedTile.isEmpty() || !touchedTile.isInRowOrColumnOf(emptyTile)) {
        return false;
    }
    else {
        mediaPlayer.start();
        if (event.getActionMasked() ==  MotionEvent.ACTION_DOWN) {
            movedTile = touchedTile;
            currentMovement = getTilesBetweenEmptyTileAndTile(movedTile);
            //movedTile.numberOfMoves = 0;
        }
        else if (event.getActionMasked() == MotionEvent.ACTION_MOVE) {
            if (lastDragPoint != null) {
                followFinger(event);
            }
            lastDragPoint = new PointF(event.getRawX(), event.getRawY());
        }
        else if (event.getActionMasked() == MotionEvent.ACTION_UP) {
            currentMovement = getTilesBetweenEmptyTileAndTile(movedTile);

            if (lastDragMovedAtLeastHalfway() || isClicked()) {
                animateTilesToEmptySpace();
                checkMatch();
            }
            else {
                animateTilesBackToOrigin();
            }

            currentMovement = null;
            lastDragPoint = null;
            movedTile = null;

        }
        return true;
    }
}
4

4 回答 4

0

为什么不尝试扩展您设置的视图OnTouchListener并覆盖该onTouchEvent视图中的方法。在调用你自己的方法之后调用 super,这样你就可以确保它们会在onTouchLister. 让我知道这是否有效。

于 2015-05-02T21:25:27.457 回答
0

如果您正在寻找一个复杂的侦听器,您应该查看MotionEvent,因此MotionEvent.ACTION_UP文档说:

... 按下手势已完成,动作包含最终释放位置以及自上次向下或移动事件以来的任何中间点...。

有很多关于它的信息。

于 2015-05-02T21:28:32.217 回答
0
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // I just put my finger on the view
            return true;
        case MotionEvent.ACTION_MOVE:
            // I am moving my finger over the screen
            return true;
        case MotionEvent.ACTION_UP:
            // I have just released my finger from the screen
            return true;
        default:
            return super.onTouchEvent(event);
    }
}
于 2015-05-02T21:34:27.630 回答
0

编辑:看起来你正试图用一个空单元格制作一个拼图应用程序。
考虑到您必须使用 animator 对象,您还必须注册一个 on animate 更新侦听器。您不应该将 checkMatch() 方法放入其中,以便在动画结束时调用它,因为只有在用户移动图块后才会发生匹配?

于 2015-05-02T21:48:26.450 回答