1

これは指を動かせば問題なく動作しますが、(ACTION_MOVE を通過せずに ACTION_DOWN から ACTION_UP まで) タップしただけでは何も描画されません。何か案が?

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawPath(path, paint);   
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float eventX = event.getX();
    float eventY = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(eventX, eventY);
            path.lineTo(eventX, eventY);
        return true;
        case MotionEvent.ACTION_MOVE:
            path.lineTo(eventX, eventY);
        break;
        case MotionEvent.ACTION_UP:
            path.lineTo(eventX, eventY);
        break;
        default:
        return false;
    }

    // Schedules a repaint.
    invalidate();
    return true;
}
}

私が思いついた最も近い答えは、eventxとyがActionUPの最後のものと同じかどうかを確認し、xとyの両方に+1を追加することです...

4

3 に答える 3

1

単純なタップでも何かを実行するには、次のようにする必要があります。

boolean notMoved = true;
switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:
        path.moveTo(eventX, eventY);
    return true;

    case MotionEvent.ACTION_MOVE:
        path.lineTo(eventX, eventY);
        notMoved = false;
    break;

    case MotionEvent.ACTION_UP:
        if(notMoved) {
            //draw something
            path.lineTo(eventX, eventY);
        }
    break;
    default:
    return false;
}
于 2013-03-07T23:25:53.157 に答える
1

... MotionEvent.ACTION_UP ケースで何もしないのではなく、何かを行います。はじめに:

if (moved) {
  moved = false;
  // on-tap behavior
}

ACTION_MOVE ケースがフラグを設定する場所。次のステップ: ACTION_DOWN と ACTION_MOVE で座標に関するメモを共有することで、誤って「移動」することなく簡単にタップできるようにします。

于 2013-03-07T23:26:14.010 に答える
0

多分

break;

それ以外の

return true;
于 2013-03-07T23:25:48.687 に答える